You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
그 외에도 함수 컴포넌트는 hook을 사용하지만, 클래스형 컴포넌트는 hook을 대신하는 클래스의 다른 메소드를 사용하는 등의 차이가 있지만 props에 관한 설명이므로 이 정도만 설명한다.
예제 코드
부모 컴포넌트
import{Component}from'react';importChildComponentfrom'./ChildComponent.js';classParentComponentextendsComponent{render(){return(<div><ChildComponentfavoriteNumber={30}>
class component children value
</ChildComponent></div>);}}exportdefaultParentComponent;
부모 컴포넌트도 클래스 컴포넌트이고 자식 컴포넌트도 클래스 컴포넌트이지만 함수 컴포넌트와 똑같이 부모 컴포넌트에서 자식 컴포넌트로 prop를 전달할 수 있다. <ChildComponent favoriteNumber={30}> ... </ChildComponent>와 같이 컴포넌트를 태그로 사용하였다면 컴포넌트나 클래스 컴포넌트나 사용방법은 동일하다.
부모 컴포넌트에서 자식 컴포넌트로 값을 전달했는데, 위의 코드에서는 2가지를 전달하였다. 하나는 favoriteNumber라는 값을 컴포넌트 태그의 속성으로 전달하였고 해당 속성의 값으로 30을 전달하였다. 또 다른 하나는 여는 컴포넌트 태그(<ChildComponent favoriteNumber={30}>)와 닫는 컴포넌트 태그(</ChildComponent>) 사이의 값으로 전달한 것이다. 이 때 여는 컴포넌트 태그와 닫는 컴포넌트 태그 사이에 값을 전달하는 방식은 children 속성을 전달한 것이고 children 속성으로 전달된 값은 class component children value이 된다.
자식 컴포넌트
import{Component}from'react';importPropTypesfrom'prop-types';classChildComponentextendsComponent{render(){const{ name, favoriteNumber, children }=this.props;return(<div>
Hi, my name is {name}. <br/>
children value is {children}<br/>
my favorite number is {favoriteNumber}</div>);}}ChildComponent.defaultProps={name: 'default name',};ChildComponent.propTypes={name: PropTypes.string,favoriteNumber: PropTypes.number.isRequired,};exportdefaultChildComponent;
부모 컴포넌트로 부터 favoriteNumber와 children을 전달 받았다. 하지만 name은 부모 컴포넌트에서 전해지지 않았다.
함수 컴포넌트에서 함수_컴포넌트명.defaultProps와 마찬가지로 클래스_컴포넌트명.defaultProps에 전달된 prop가 없을 때 디폴트로 세팅해 주는 값을 정해 주면 name은 부모 컴포넌트에서 전달되지 않은 값이지만 .defaultProps의 설정으로 인해 name 값에 'default name'이 할당되는 것을 확인할 수 있다.
마찬가지로 함수 컴포넌트에서 함수_컴포넌트명.propTypes와 마찬가지로 클래스_컴포넌트명.propTypes으로 전달되는 prop의 타입과 필수/옵션 유무를 설정할 수 있는데, favoriteNumber값을 수 타입, 필수로 지정했기 때문에 부모 컴포넌트에서 favoriteNumber={30}를 전달하지 않으면 필수 옵션을 통과하지 못하여 에러가 발생하며, favoriteNumber={"30"}과 같이 수가 아닌 문자열을 전달하면 수 타입이 아니기 때문에 에러가 발생한다.