В чем разница между useEffect и useCallback

«В чем разница между useEffect и useCallback» — вопрос из категории React, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

useEffect и useCallback служат разным целям в React, несмотря на то что оба работают с зависимостями.

useEffect — хук для side-эффектов (запросы, подписки, ручное изменение DOM). Выполняется после рендера, когда зависимости из массива изменяются.
Пример:

useEffect(() => {
  fetchData();
}, [userId]); // Запустится при изменении userId

useCallback — хук для мемоизации функций. Возвращает одну и ту же функцию, пока зависимости не изменились. Полезен для оптимизации, когда функция передаётся в дочерние компоненты.
Пример:

const handleClick = useCallback(() => {
  setCount(prev => prev + 1);
}, []); // Функция не пересоздаётся при ререндерах

Ключевое отличие:

  • useEffect — для выполнения кода после рендера.
  • useCallback — для сохранения ссылки на функцию между рендерами.