컴포넌트 밖에서 주어지는 데이터
props는 부모 -> 자식으로 단방향(1-way) 흐름으로 전달된다.
props
) 객체로 전달한다.props
객체의 각 속성으로 설정된다.props
는 컴포넌트 내부에서 컴파일에 활용된다.props
)객체는 읽기 전용(readonly)props
값을 수정하면 안된다.props
값을 수정하는 대신 컴포넌트 상태(state
)를 활용<component>{ content }</component>
// parent component
const ParentComponent = () => {
return (
<ChildComponent>
<h1> Hello </h1> /* props.children 값으로 보낸다. */
</ChildComponent>
)
}
// child component
const ChildComponent = (props) => {
return (
<div>
{ props.children } /* <h1> Hello </h1> 와 같다. */
</div>
)
}
애플리케이션의 규모가 커지면 수 많은 컴포넌트가 프로젝트에 사용되고, 팀원도 많아진다.
규모가 커짐에 따라 오류(버그)가 발생할 확률도 높아진다.
이런 문제를 사전에 차단하기 위해서는 컴포넌트에 전달되는 속성(props
)가 올바른지 사전에 검사할 수 있어야 한다.
직접 만든 커스텀 proTypes를 통해 props 속성 검사를 할 수 있지만. 자체적으로 React가 제공하는 PropTypes
모듈을 사용하자
npm i -D prop-types
import PropTypes from 'prop-types';
const Worker = ({ name, career, onCareerUp, isLeave }) => {
return (
...jsx element
)
}
/*
Work 컴포넌트에 전달된 속성 props 유효성 검사 실행
ex:) PropTypes.string => String 유형 검사
.isRequired => "필수 전달 속성"이 전달되지 않은 경우 오류를 출력하도록 설정
*/
Worker.propTypes = {
name: PropTypes.string.isRequired,
carrer: PropTypes.number.isRequired,
onCareerUp: PropTypes.func.isRequired,
isLeave: PropTypes.bool.isRequired,
}
export default Worker;
컴포넌트에 전달할 속성을 모두 필수로 만들 필요는 없다.
defaultProps
속성을 설정하는 것propTypes
속성 설정과 매우 흡사하다.const Worker = ({ name, career, onCareerUp, isLeave }) => {
return (
...jsx element
)
}
Worker.defaultProps = {
name: '웅',
career: 27,
}