ABOUT ME

-

Today
-
Total
-
  • React props : 컴포넌트에게 값 전달
    Study/React 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} 을 넣어줘야한다.

     

    반응형

    댓글