[React] 클래스형 컴포넌트에서 props 사용하기

겨레·2024년 11월 13일

[React] 리액트 스터디

목록 보기
19/95

❓🤔클래스형 컴포넌트에서 props를 사용할 때는?
👉 render 함수에서 this.props를 조회한다. defaultProps와 propTypes는 똑같은 방식으로 설정할 수 있다.

  • Component를 클래스형 컴포넌트로 변환
// Component를 클래스형 컴포넌트로 변환
import React, { Component } from 'react';
import PropTypes from 'prop-types';
 
class MyComponent extends Component {
  render() {
    const { name, favoriteNumber, children } = this.props; // 비구조화 할당
    return (
      <div>
        안녕하세요, 제 이름은 {name}입니다. <br />
        children 값은 {children}
        입니다.
        <br />
        제가 좋아하는 숫자는 {favoriteNumber}입니다.
      </div>
    );
  }
}
 
MyComponent.defaultProps = {
  name: '기본 이름'
};
 
MyComponent.propTypes = {
  name: PropTypes.string,
  favoriteNumber: PropTypes.number.isRequired
};
 
export default MyComponent;

  • class 내부에서 지정하는 방법
// 클래스형 컴포넌트에서 defaultProps와 propTypes를 설정할 때 class 내부에서 지정하는 방법
import React, { Component } from 'react';
import PropTypes from 'prop-types';
 
class MyComponent extends Component {
  static defaultProps = {
    name: '기본 이름'
  };
  static propTypes = {
    name: PropTypes.string,
    favoriteNumber: PropTypes.number.isRequired
  };
  render() {
    const { name, favoriteNumber, children } = this.props; // 비구조화 할당
    return (...);
  }
}
 
export default MyComponent;



(+) defaultProps와 propTypes는 꼭 사용해야 할까?

필수 사항이 아니므로 꼭 사용할 필요는 없으나 React를 사용하여 큰 규모의 프로젝트를 진행할 경우, 협업할 경우 컴포넌트에 어떤 props가 필요한지 쉽게 알 수 있어 개발 능률이 높아지게 된다.


(+) 💣 트러블이슈
잘못된 임포트가 사용되고 있었다... 저장할 때 자동으로 임포트된 걸까? 아마 이전에는 계속 함수평 컴포넌트를 쓰다가 클래스형 컴포넌트 예제 따라하면서 그렇게 된 것 같다.

MyComponent를 클래스형 컴포넌트로 정의할 때 React.Component를 상속받지 않아서 생긴 경고...

👉 해결 방법
Component를 사용하려면 React.Component로 명시적으로 지정해야 한다. Component를 사용해야 클래스형 컴포넌트를 정의할 수 있음!

import React, { Children } from 'react'; 

// 위에 임포트 제거하고 아래와 같이 수정!
import React, { Component } from 'react';  

임포트 수정하고 다시 실행하면.... 잘 나옴!

profile
호떡 신문지에서 개발자로 환생

0개의 댓글