Study/React

React props : 컴포넌트에게 값 전달

xiubin 2020. 1. 3. 10:51
반응형

 

컴포넌트 props란?

properties의 줄임말로서, 컴포넌트의 입력값이다.

props는 부모 컴포넌트로부터 자식 컴포넌트로 전달된 데이터를 의미한다.

그리고 props 는 state와 달리 read-only 라는 것에 주의해야한다.

 

 

props 사용법

 

App.js

import React from 'react';
import Hello from './Hello';

function App() {
  return (
    <Hello name="subin" color="blue"/>
  );
}

export default App;

App 컴포넌트에서 Hello 컴포넌트를 불러와서 사용할 때,

name과 color 값을 전달해주고자 한다.

 

 

첫 번째 방법: props 파라미터 활용

 

Hello.js

import React from 'react';

function Hello(props) {
  console.log(props);
  return (
    <div style={{ color: props.color }}>
        안녕하세요 {props.name}
    </div>
  )
}

export default Hello;

 

props는 객체 형태로 전달 되는데, 콘솔로그로 props를 찍어보면

{name: 'subin', color: 'blue'} 라고 뜬다.

따라서 두 값을 사용할 때 객체형태로 props.name과 같이 사용하면 된다.

 

 

두 번째 방법 : es6문법 destructuring 활용

 

Hello.js

import React from 'react';

function Hello({name, color}) {
  return (
    <div style={{ color: color }}>
        안녕하세요 {name}
    </div>
  )
}

export default Hello;

es6문법인 destructuring 을 통해서 Hello의 인자로 {name, color} 을 전달한다.

 

 

전달받은 props를 바꿔서 사용하고 싶다면?

 

props는 직접적으로 바꿀 수 없다.

하지만 자식 컴포넌트에서 state에 props 값을 넣어준 후에 바꿔서 사용할 수 는 있다.

 

import React, {useState} from 'react';

function Hello({name, color}) {
  const [result, setResult] = useState(name);
  const onClick = () => {
    setResult('jenny');
  };
  
  return (
    <div style={{ color: color }}>
        <div onClick={onClick}> 안녕하세요 {result} </div>
    </div>
  )
}

export default Hello;

 

const [result, setResult] = useState(name);

 

: 전달 받은 name props를 state 로 관리해준다.

 

setResult('jenny');

 

: 그리고 바꾸고자 하는 값을 setResult의 인자로 준다.

 

 

defaultProps로 props 기본값 설정

 

컴포넌트에 props를 지정하지 않았을 때 기본값을 설정할 수 있다.

 

방법

컴포넌트이름.defaultProps = { key: 'value' }

 

Hello.js

import React from 'react';

function Hello({name, color}) {
  return (
    <div style={{ color: color }}>
        안녕하세요 {name}
    </div>
  )
}

Hello.defaultProps = {
  color: 'black'
}

export default Hello;

index.js

import React from 'react';
import Hello from './Hello';

function App() {
  return (
    <>
    <Hello name="subin" color="blue"/>
    <Hello name="subin" />
    </>
  );
}

export default App;

 

props.children

 

컴포넌트 태그 사이에 넣은 것들을 조회하기 위해서는 props.children을 사용해야한다.

 

App.js

import React from 'react';
import Hello from './Hello';
import Wrapper from './Wrapper';

function App() {
  return (
    <Wrapper>
      <Hello name="subin" color="blue"/>
      <Hello name="subin" />
    </Wrapper>
  );
}

export default App;

위와 같이 Wrapper 태그 내부에 있는 Hello 컴포넌트를 보여지게 하려면,

 

 

Wrapper.js

import React from 'react';

function Wrapper({children}) {
  const style = {
    border: '2px solid black',
    padding: 20,
    width: 200
  };
  return (
    <div style={style}>
        {children}
    </div>
  )
}

export default Wrapper;

 

Wrapper 컴포넌트 인자로 디스트럭쳐링한 {children} 을 넣어줘야한다.

 

반응형