함수형 컴포넌트를 export할 때, React.memo로 wrapping하여 최적화한다.
React.memo는 인자로 받은 컴포넌트에 어떤 props가 들어가는지 확인한다.
그리고 모든 props 값을 확인하고 그 값을 props가 이전에 받은 값과 비교하여, props 값이 변경된 경우에만 컴포넌트를 재실행 및 재평가한다.
부모 컴포넌트가 바뀌었지만 props는 바뀌지 않은 경우, 해당 자식 컴포넌트는 재실행되지 않는다.
이렇게 최적화를 하여 불필요한 렌더링을 막는다.
export default React.memo(DemoOutput);
그렇다면 모든 컴포넌트를 최적화하면 되지 않을까?
props 값에 변하지 않은 함수만 들어있음에도 불구하고 리액트에서 props 값이 변경되었다고 보고 컴포넌트가 재실행 및 재평가되는 이유는 객체인 함수는 매번 실행할때마다 재생성되어 이전과 다르다고 판단되기 때문이다.
const somethingHandler = useCallback(() => {
setSomething(prevState => !prevState);
}, []);