useMemo()
useCallback()
React.memo()
shouldComponentUpdate
Hook 버전useSelector
를 사용해서 리덕스 스토어의 상태를 조회 할 땐 만약 상태가 바뀌지 않았으면 리렌더링하지 않음.const { number, diff } = useSelector(state => ({
number: state.counter.number,
diff: state.counter.diff
}));
// Solution (1) 여러번 useSelector 사용하기
const number = useSelector(state => state.counter.number);
const diff = useSelector(state => state.counter.diff);
// Solution (2) redux의 "shallowEqual" 내장 함수 사용하기
const { number, diff } = useSelector(
state => ({
number: state.counter.number,
diff: state.counter.diff
}),
shallowEqual
);
equalityFn
란?
이전 값과 다음 값을 비교하여 true가 나오면 리렌더링을 하지 않고 false가 나오면 리렌더링을 합니다.
equalityFn?: (left: any, right: any) => boolean
shallowEqual
란?
shallowEqual은 react-redux에 내장되어있는 함수로서, 객체 안의 가장 겉에 있는 값들을 모두 비교해줍니다.
// 가장 겉에 있는 값은 object.a, object.b, object.c
// shallowEqual 에서는 해당 값들만 비교
const object = {
a: {
x: 3,
y: 2,
z: 1
},
b: 1,
c: [{ id: 1 }]
}
React Profiler를 사용하여 Component의 total render, duration등의 정보를 확인 할 수 있다. 편리한 도구가 될듯