- 함수 컴포넌트가 리렌더링 되는 경우 3가지
- 자신의 상태가 변경될 때
- 부모 컴포넌트의 상태가 변경될 때
- 부모 컴포넌트로 부터 받는 prop이 변경될 때
원래는 리렌더링 될 때마다 모든 값을 다시 연산한다. ⇒ 최적화를 위해서 useMemo를 사용!!
- 두번째 인자로 지정한 대상이 변경될 때만 연산을 해서 새롭게 값을 Return한다.. ⇒ 결국 값이다!
- 변경되지 않으면 아무리 리렌더링 되어도 연산하지 않고, 이전에 메모제이션한 값을 return한다
- 두번째 인자(dependency)
- 코드 내에서 참조된 모든 반응형 값들의 목록
- props, state, (컴포넌트 바디에 직접 선언된 모든) 변수와 함수가 될 수 있음
function con({a,b,c}) { const message = useMemo(()=>{ console.log(a,b,c) return "memo" },[a,b,c]) }
- 빈배열이면 첫 렌더링때만 실행됨
function con() { const message = useMemo(()=>{ console.log("first") return "memo" },[]) }
- 아무것도 주지 않으면 일반 함수와 같게 됨
function con() { const message = useMemo(()=>{ console.log("click") return "memo" }) }
앞서
3. 부모 컴포넌트로 부터 받는 prop이 변경될 때도 컴포넌트가 리렌더링된다
고 했는데 이걸 막으려면?⇒ 오로지 자신이 변경될 때만 리렌더링 하려면
React.memo
를 사용해서 컴포넌트를 생성한다const Box = React.memo(()=>{ return <div /> })