Ответ
useMemo и useCallback оба оптимизируют производительность, но решают разные задачи:
-
useMemo кэширует результат вычислений и возвращает его, пока зависимости не изменились.
Пример:const expensiveValue = useMemo(() => computeExpensiveValue(a, b), [a, b]); -
useCallback кэширует саму функцию, а не её результат. Полезно для передачи стабильных колбэков дочерним компонентам.
Пример:const memoizedCallback = useCallback(() => { doSomething(a, b) }, [a, b]);
Ключевое отличие:
useMemo— для значений,useCallback— для функций.
Оба предотвращают лишние ререндеры, но только если зависимости остаются прежними.