ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 컴포넌트(2) props (properties) 사용법
    React 리액트 2023. 9. 4. 15:13
    반응형

     

    1. 프로퍼티(props)란?
     - 프로퍼티, props(properties의 줄임말) 라고 한다.
     - 상위 컴포넌트가 하위 컴포넌트에 값을 전달할때 사용한다. (단방향 데이터 흐름 갖는다.)
     - 프로퍼티는 수정할 수 없다는 특징이 있다. (자식입장에선 읽기 전용인 데이터이다.)

     

    src/App.js

    import React, { Component } from 'react'; // 리액트를 구현할 수 있는 플러그인을 연결
    import Header from './component/Header';
    import Footer from './component/Footer';
    import Main from './component/Main';
    
    // JS파일에 외부 파일을 불러오는 것이기 때문에 "import" 키워드를 사용한다. 
    // 같은 JS파일은 확장자를 사용하지 않는다. 
    
    function App() {
      return (
        <div>
          <Header />
              <Main name="2023.09" color="blue" useYn/>
              <Main name="Dev.MK" color="black"/>
              <Main name={10000}/>
          <Footer />
        </div>
      );
    }
    
    export default App; //다른 JS파일에서 불러올 수 있도록 내보내주기

     

    name , color 란 key명으로 Main.js에 props값을 넘길 수 있다. 

     

    props를 접근하여 값을 가져오기

    /src/Main.js

    import React from 'react';
    import PropTypes from 'prop-types' // 프로퍼티 타입을 지정해주기 위해 사용 한다.
    
    function Main(props) {
    
        const msg = useYn ? '사용' : '미사용'; // 불리언 사용
        
        return (
            <div>
                <main>
                    <h1 style={{color: props.color}}>안녕하세요. {props.name} 입니다. ({msg})</h1>
                </main>
            </div>
        );
    }
    
    Main.propTypes = {
        name: PropTypes.string.isRequired
    }
    
    Main.defaultProps = {
        name: '디폴트'
    }
    export default Main; //다른 JS파일에서 불러올 수 있도록 내보내주기

    값을 가져올때는 props.key명으로 가져온다.

     

     

    javascript의 비구조화 할당으로 값을 가져오기

    import React from 'react';
    import PropTypes from 'prop-types' // 프로퍼티 타입을 지정해주기 위해 사용 한다.
    
    function Main({color, name, useYn}) {
    
        const msg = useYn ? '사용' : '미사용'; // 불리언 사용
        
        return (
            <div>
                <main>
                    <h1 style={{color}}>안녕하세요. {name} 입니다. ({msg})</h1>
                </main>
            </div>
        );
    }
    
    Main.propTypes = {
        name: PropTypes.string.isRequired
    }
    
    Main.defaultProps = {
        name: '디폴트'
    }
    export default Main; //다른 JS파일에서 불러올 수 있도록 내보내주기

    props을 생략하고 key명으로만 값을 가져올 수 있다.

     

    2. propTypes와 defailtProps

    pros의 대한 옵션설정이고 생략 할 수있다.

    propTypes는 데이터형을 지정 및 필수값 유무를 지정할 수 있다.

    name: PropTypes.string.isRequired 은  name이란 props key는 문자열이고 필수로 값을 설정해야한다.

    string인데 불구하고 숫자형으로 값을 보내면

    Failed prop type: Invalid prop `name` of type `number` supplied to `Main`, expected `string`.

    에러가 발생한다.

    defailtProps는 props의 디폴트 값을 설정할 수 있다.

    <h1 style={{color}}>안녕하세요. {name} 입니다. ({msg})</h1>에 name을 지정했지만

    보내는곳에서 값을 보내지 않았을때 default 값이 표시된다.

     

     

    #결과

     

     

    3. props.children 사용하기

    Main컴포넌트를 Wrapper 컴포넌트가 감싸고 Main의 엘리먼트를 가져오려면 children을 사용해야한다.

    마찬가지로 props로 접근하거나 비구조화 할당방법으로 엘리먼트를 가져올 수 있다.

     

    src/App.js

    import React, { Component } from 'react'; // 리액트를 구현할 수 있는 플러그인을 연결
    import Header from './component/Header';
    import Footer from './component/Footer';
    import Main from './component/Main';
    import Wrapper from './component/Wrapper';
    
    // JS파일에 외부 파일을 불러오는 것이기 때문에 "import" 키워드를 사용한다. 
    // 같은 JS파일은 확장자를 사용하지 않는다. 
    
    function App() {
      return (
        <div>
          <Header />
              <Wrapper>
                  <Main name="2023.09" color="blue" useYn/>
                  <Main name="Dev.MK" color="black"/>
                  <Main name={10000}/>
                  <Main/>
              </Wrapper>
          <Footer />
        </div>
      );
    }
    
    export default App; //다른 JS파일에서 불러올 수 있도록 내보내주기

     

     

    props.children 사용하여 값을 가져오기

    src/component/Wrapper.js

    import React from 'react';
    import PropTypes from 'prop-types' // 프로퍼티 타입을 지정해주기 위해 사용 한다.
    
    //1번째 방법 ( props.children 사용 )
    function Wrapper(props) {
    
        const style = {
            backgroundColor: 'yellow',
          };
        
        return (
            <div style={style}>
                {props.children}
            </div>
        );
    }
    
    export default Wrapper;

     

    javascript의 비구조화 할당으로 값을 가져오기

    src/component/Wrapper.js

    import React from 'react';
    import PropTypes from 'prop-types' // 프로퍼티 타입을 지정해주기 위해 사용 한다.
    
    //2번째방법 비구조화 할당방법
    function Wrapper({children}) {
        const style = {
            backgroundColor: 'yellow',
          };
        
        return (
            <div style={style}>
                {children}
            </div>
        );
    }
    
    //반대로 하나의 자식만 요구할 수도 있음
    Wrapper.propTypes = {
        children: PropTypes.element.isRequired
    };
    
    export default Wrapper;

     

    현재 App.js에 Wrapper컴포넌트 하위에는 Main 컴포넌트 구조

    <Wrapper>
      <Main name="2023.09" color="blue" useYn/>
      <Main name="Dev.MK" color="black"/>
      <Main name={10000}/>
      <Main/>
    </Wrapper>

    children: PropTypes.element.isRequired 이 옵션은 모든 칠드런 엘리먼트를 출력하는것이 아니라 1개의 칠드런만 허용한다는 뜻이다. 그래서 현재 Main 컴포넌트가 Wrapper컴포넌트 하위로 4개가 있기 때문에 아래의 오류가 발생한다.

     Invalid prop `children` of type `array` supplied to `Wrapper`, expected a single ReactElement.

     

     

    #결과

     

     

    반응형

    댓글

Designed by Tistory.