함수 useCallback으로 감싸는 중요한 이유가
부모 컴포넌트 리렌더링 =>
부모 컴포넌트 내에 정의한 함수도 새로 생성됨 =>
새로 생성되면 당연히 리렌더링전과 다른 객체 =>
이걸 자식 컴포넌트로 넘기면 프로퍼티가 달라진거니 자식 컴포넌트도 쓸데없이 리렌더링됨
따라서 함수를 useCallback으로 감싸서 레퍼런스 이퀄리티를 유지시켜줘야 리렌더링 막을 수 있음
이거 맞음?
그러면 엄청 가벼운 연산하는 함수들도 자식 컴퍼넌트에 넘길거면 전부 useCallback으로 감싸야하네?
자식 컴포넌트 리렌더링 자체도 가벼워서 무시해버릴거 아니면?
그러면 useCallback은 거의 항상 쓰게되는거임?
빼먹었는데 자식 컴포넌트도 memo한 상태라는 가정임
잘못하면 useCallback - memo 콤보가 리렌더링보다 비쌀수 있기 때문에 비용이득이 확실할때만 쓰는거라고 알고있음 나도 쪼렙이라 자신은 없다
이게 맏따
https://kentcdodds.com/blog/usememo-and-usecallback
니 자식 컴포넌트에서 막 몇백개씩 렌더링하는거 아닌이상 useState를 그렇게까지 빡세게 최적화할 필요는 없음
dispath같은 경우는 메모이제이션을 하는게 좋다고 하는 것 같음.
https://thebook.io/080203/ch17/07/02-01/
한번도 useCallback이 실무에서 필요한 적 없었음. 리렌더가 되더라도 리액트가 중복 프롭이면 알아서 최적화를 하는 이상 부모 자식 건너 객체 보존까지 생각해서 저거 할 일이 없음. useMemo는 몇 번 있었음 막 복잡한 차트나 계산이 필요할때 유용함.