Знаешь ли про React 19 и изменения в компиляторе, убирающие необходимость использования useCallback и useMemo
Что проверяют
Отличаете ли вы React 19 от React Compiler и понимаете ли, что именно компилятор делает с мемоизацией. В вопросе спрятана ловушка: сам React 19 необходимость в useMemo и useCallback не убрал. Следом спрашивают, когда ручная мемоизация всё ещё нужна и что будет с кодом, который нарушает правила React.
Как отвечать
Разведите две вещи:
- React 19: релиз конца 2024 года про Actions,
useActionState,useOptimistic,use,refкак обычный проп и стабильные Server Components. Модель рендера и мемоизации в нём прежняя; - React Compiler: отдельный инструмент сборки, плагин
babel-plugin-react-compiler, стабильная версия 1.0 вышла осенью 2025 года. К 19-й версии он не привязан, с React 17 и 18 работает через пакетreact-compiler-runtime.
Компилятор при сборке разбирает компоненты и хуки и сам вставляет кэширование значений, колбэков и JSX. Мемоизация получается точнее ручной: он умеет кэшировать и после условных веток, где хук вызвать нельзя. Поэтому в новом коде useMemo, useCallback и React.memo чаще всего не нужны.
Условие одно: код соблюдает правила React. Компонент чистый, пропсы и состояние не мутируются во время рендера, хуки вызываются по правилам. Если компилятор видит нарушение, он молча пропускает этот компонент. Нарушения ловят правила компилятора в eslint-plugin-react-hooks, а в React DevTools оптимизированные компоненты помечены бейджем Memo. Подключается компилятор в Vite через Babel-плагин, в Next.js опцией reactCompiler, а отключить его для одного компонента можно директивой "use no memo".
Ручная мемоизация остаётся запасным выходом, когда нужно жёстко контролировать идентичность значения, например для зависимостей useEffect.
Где спотыкаются
Говорят, что это встроено в React 19 и работает само. Компилятор нужно отдельно подключить в сборку.
Массово удаляют существующие useMemo и useCallback сразу после включения. Компилятор с ними совместим, а удаление может изменить результат компиляции, поэтому делать это стоит под защитой тестов.
Ждут, что компилятор решит любые проблемы производительности. Тяжёлые вычисления, лишние запросы и перерисовки подписчиков контекста он не отменяет.