FRONT-END/REACTJS

props

JINGMONG 2021. 12. 19. 03:37

props

props는 properties의 줄인 표현, 컴포넌트 속성을 설정할 때 사용하는 요소. props 값은 해당 컴포넌트를 불러와 사용하는 부모 컴포넌트에서 설정할 수 있다.

JSX 내부에서 props 렌더링

import React from 'react';

const MyComponent = (props) => {
  return <div>안녕하세요. 저는 {props.name} 입니다.</div>;
};

export default MyComponent;

컴포넌트를 사용할 때 props 값 지정

import MyComponent from './MyComponent';

class App extends Component {
  render() {
    return <MyComponent name="react" />;
  }
}

export default App;

props 기본값 설정: defaultProps

import React from 'react';

const MyComponent = (props) => {
  return <div>안녕하세요. 저는 {props.name} 입니다.</div>;
};
MyComponent.defaultProps = {
  name: '기본 이름',
};

export default MyComponent;

태그 사이의 내용을 보여주는 children

리액트 컴포넌트를 사용할 때 컴포넌트 태그 사이의 내용을 보여주는 props가 있다. children이라 한다

App.js

import MyComponent from './MyComponent';

class App extends Component {
  render() {
    return <MyComponent>리액트</MyComponent>;
  }
}

export default App;

MyComponent.js

import React from 'react';

const MyComponent = (props) => {
  return (
    <div>
      안녕하세요. 저는 {props.name} 입니다. <br />
      children 값은 {props.children} 입니다.
    </div>
  );
};
MyComponent.defaultProps = {
  name: '기본 이름',
};

export default MyComponent;

비구조화 할당 문법을 통해 props 내부 값 추출

import React from 'react';

const MyComponent = (props) => {
  const { name, children } = props;
  return (
    <div>
      안녕하세요. 저는 {name} 입니다. <br />
      children 값은 {children} 입니다.
    </div>
  );
};
MyComponent.defaultProps = {
  name: '기본 이름',
};

export default MyComponent;

객체에서 값을 추출하는 문법을 비구조화 할당이라고 한다. 구조 분해 문법이라고도 한다.

함수의 파라미터 부분에서도 사용할 수 있다.

import React from 'react';

const MyComponent = ({ name, children }) => {
  return (
    <div>
      안녕하세요. 저는 {name} 입니다. <br />
      children 값은 {children} 입니다.
    </div>
  );
};
MyComponent.defaultProps = {
  name: '기본 이름',
};

export default MyComponent;

propTypes를 통한 props 검증

컴포넌트의 필수 props를 지정하거나 props의 타입을 지정할 때는 propTypes를 사용한다. 컴포넌트의 propTypes를 지정하는 방법은 defaultProp을 설정하는 것과 비슷하다.

import React from 'react';
import PropTypes from 'prop-types';

const MyComponent = ({ name, children }) => {
  return (
    <div>
      안녕하세요. 저는 {name} 입니다. <br />
      children 값은 {children} 입니다.
    </div>
  );
};
MyComponent.defaultProps = {
  name: '기본 이름',
};
MyComponent.propTypes = {
  name: PropTypes.string
};

export default MyComponent;

propTypes를 설정해주면 name 값은 반듯이 string 형태로 전달해야 한다.

isRequired를 사용하여 필수 propTypes 설정

import React from 'react';
import PropTypes from 'prop-types';

const MyComponent = ({ name, num, children }) => {
  return (
    <div>
      안녕하세요. 저는 {name} 입니다. <br />
      children 값은 {children} 입니다. <br />
      숫자는 {num} 입니다.
    </div>
  );
};
MyComponent.defaultProps = {
  name: '기본 이름',
};
MyComponent.propTypes = {
  name: PropTypes.string,
  num: PropTypes.number.isRequired,
};

export default MyComponent;

PropTypes 종류

더보기
  • array: 배열
  • arrayOf(다른 PropType): 특정 PropType으로 이루어진 배열을 의미 ex)arrayOf(PropTypes.number)는 숫자로 이루어진 배열
  • bool: true or false
  • func: 함수
  • number: 숫자
  • object: 객체
  • string: 문자열
  • symbol: ES6의 Symbol
  • node: 렌더링할 수 있는 모든 것
  • instanceOf(클래스): 특정 클래스의 인스턴스 ex)instanceOf(MyClass)
  • oneOf([’dog’, ‘cat’]): 주어진 배열 요소 중 하나
  • oneOfType([React.PropTypes.string, PropTypes.number]): 주어진 배열 안의 종류 중 하나
  • objectOf(React.PropTypes.number): 객체의 모든 키 값이 인자로 주어진 PropType인 객체
  • shape({ name: PropTypes.string, num: PropTypes.number }): 주어진 스키마를 가진 객체
  • any: 아무 종류

GitHub - facebook/prop-types: Runtime type checking for React props and similar objects

 

GitHub - facebook/prop-types: Runtime type checking for React props and similar objects

Runtime type checking for React props and similar objects - GitHub - facebook/prop-types: Runtime type checking for React props and similar objects

github.com

클래스형 컴포넌트에서 props 사용

import { Component } from 'react';
import PropTypes from 'prop-types';

class MyComponent extends Component {
  render() {
    const { name, num, children } = this.props;
    return (
      <div>
        안녕하세요. 저는 {name} 입니다. <br />
        children 값은 {children} 입니다. <br />
        숫자는 {num} 입니다.
      </div>
    );
  }
}
MyComponent.defaultProps = {
  name: '기본 이름',
};
MyComponent.propTypes = {
  name: PropTypes.string,
  num: PropTypes.number.isRequired,
};

export default MyComponent;

class 내부에서 defaultProps와 propTypes 지정

import { Component } from 'react';
import PropTypes from 'prop-types';

class MyComponent extends Component {
  static defaultProps = {
    name: '기본 이름',
  };
  static propTypes = {
    name: PropTypes.string,
    num: PropTypes.number.isRequired,
  };
  render() {
    const { name, num, children } = this.props;
    return (
      <div>
        안녕하세요. 저는 {name} 입니다. <br />
        children 값은 {children} 입니다. <br />
        숫자는 {num} 입니다.
      </div>
    );
  }
}

export default MyComponent;

'FRONT-END > REACTJS' 카테고리의 다른 글

이벤트 핸들링  (0) 2021.12.20
state  (0) 2021.12.19
컴포넌트  (0) 2021.12.19
JSX 문법  (0) 2021.12.18
JSX  (0) 2021.12.18