Props는 일종의 방식이다.
function Btn(props){ return ( <button>{props.banana}</button>}
App에서 컴포넌트 호출할때
Btn{banana="sale"}
보통 이렇게 사용하는 대신
> ```
function Btn({banana}){
return (
<button>{banana}</button>)
Btn 으로 스타일 적용해주면, onClick={reset} 함수에 전달이 되지 않음.
해당 reset 함수를 복사했음에도 읽지못함
=> button에 들어가는 props 중 하나로 인식되기만 함 ( onClick으로 이름은 같지만 props이름일 뿐이다. )
## App에서 text={a}
## Btn 함수에서 Btn({a}) {
## return ( ~onClick={a})
3개 일치시키기.
``` style안에서 if else를 사용할 수 있다 (props기반으로)
<button style={{fontSize: big ? 18 : 16}}> </button> ```
만약 컴포넌트가 상태를 바꾼다면 다시 render한다.
부모가 렌더링 일어다면 자식들 모두 re-render발생한다.
=> React.memo - 만약 props가 변경되지 않는 한 리렌더 방지
모든 자식들이 re-render면 애플리케이션 속도 저하 원인이 될 수 있다.
prop이 변했다는 말은, state가 변했었다는 말이고, state는 함수의 prop에 연결되어 있다.
이런 식으로 memo로 Btn 컴포넌트를 감싸고 사용한다면
onClick으로 변화가 없는 text="NoRendered" 컴포넌트는 re-render가 일어나지 않는다.
fontSize: fontSize 처럼 같은 경우 fontSize만 써도 된다.
터미널에서 설치
1. npm i prop-types
import propTypes from "prop-types"
Btn.propTypes = {
text: PropTypes.string,
};
Oneof ('a','b') 이 중에서 한개 값 가져야한다.
타입들 중 하나만 충족하면 된다.
선택적으로 있어도 되고, 없어도 되는 경우
required(필수적)인 걸로 만들고 싶다면
text, fontSize가 필수로 존재해야하는 경우
text필수, fontSize없으면 default값 = 14로 선언
컴포넌트를 이용하는 경우 Click이벤트도 해당 컴포넌트에서 다시 정리해줘야 하고, propTypes로 개발자들이 편리하게 오류를 발견할 수 있음을 알 수 있었다.
( 노마드 코더 prop을 듣고 정리 )