- Published on
useCallback
- Authors

- Name
- junyeol kim
useCallback
- 메모이제이션된 콜백 함수, 즉 이미 생성된 함수를 반환하는 React hook이다.
Parameters
useCallback(fn , dependencies)
fn- 캐싱하려는 함수 값이다.
- 어떤 인수도 지정할 수 있고, 반환할 수 있다.
dependenices를 이전 렌더링과 비교하여 변화가 없다면 같은 함수 실행값을 제공한다.dependenices가 변화하였다면, 나중에 재사용할 수 있도록 캐싱해둔다.
dependenicesprops, state, 컴포넌트 내부에 있는 모든 값들이 포함될 수 있다.- 의존성 목록은
인라인 형식으로 작성되어야 한다. React가Object.is알고리즘을 사용하여 각 의존성을 이전 값과 비교한다.
Returns
초기 렌더링에서
fn를 반환한다.이후 렌더링에는
dependenices에 따라 기존fn을 반환이 결정된다.
WARNING
useCallback는 hook이므로 컴포넌트 최상위 레벨이나 훅 내부에서 호출해야한다.
조건부 혹은 반복문에서는 호출해서는 안된다.
Usage
Skipping re-rendering of components
useCallback은 재렌더링 사이에서 함수 참조를 유지하기 위한 Hook
memo로 감싼 자식 컴포넌트의 불필요한 재렌더링 방지
의존성이 바뀌지 않으면 같은 함수 참조를 반환
Updating state from a memoized callback
- 의존성을 최대한 적게하기 위하여, 업데이트 함수를 전달하는 방식을 사용할 수 있다.
setTodos([...todos, newTodo]) // ❌
setTodos((prev) => [...prev, newTodo]) // ✅
Preventing an Effect from firing too often
- Effect 내부에서 외부 함수 사용 -> 해당 함수가 렌더마다 새로 생성됨 -> Effect가 매번 재실행됨
useCallback으로 함수 고정
함수 자체를 Effect 내부로 이동
Optimizing a custom Hook
- 커스텀 훅이 함수를 반환한다면 useCallback으로 감싸는 것을 권장한다.
NOTE
function () {} / () => {} ➡️ 항상 새로운 함수 useCallback(fn, deps) ➡️ deps가 같으면 같은 함수
두 개의 차이는 로직이 아니라 참조 동일성에 대한 것 이다.