useMemo는 메모이제이션된 값을 반환한다
useMemo는 이전의 값을 기억해두었다가 조건에 따라 재활용을 해서 성능을 최적화 하는 용도로 사용한다.
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
메모이제이션된 함수를 반환한다.
const memoizedCallback = useCallback(
() => {
doSomething(a, b);
},
[a, b],
);
React.memo는 고차 컴포넌트이다.
고차 컴포넌트는 어떤 컴포넌트를 받아서 새로운 컴포넌트(최적화된 컴포넌트)를 반환해주는 함수이다.
렌더링이 될 때마다 prop check를해서 자신이 받는 props에 변화가 있는지 없는지 확인한다.
props에 변화가 있으면 렌더링하고 없으면 기존에 렌더링된 내용을 재사용한다.
React.memo의 memo는 memoization을 의미한다.
memoization은 이미 계산해놓은 값을 메모리에 저장해두고 재사용하는 기법이다.
React.memo는 오직 Props의 변화에만 의존하기 때문에 useState같은 hook을 사용할 때 state가 변할 때마다 다시 렌더링이 일어난다는 것을 잊지 말아야 한다.
공통점
React.memo, useMemo, useCallback 모두 불필요한 렌더링 또는 연산을 제어하는 용도로 성능 최적화에 목적이 있다.
차이점
useMemo(()=>fn,[deps]) === useCallback(fn,[deps])