Создание собственного хука‑мемоизатора, аналогичного useCallback без списка зависимостей

Если нужна именно одна исходная функция на всё время жизни экземпляра, сохраните её в useRef. Но она сохранит замыкание первого рендера и не начнёт автоматически видеть новые props/state.

Короткий ответ

Что ответить на собеседовании

Если нужна именно одна исходная функция на всё время жизни экземпляра, сохраните её в useRef. Но она сохранит замыкание первого рендера и не начнёт автоматически видеть новые props/state.

Подробный разбор

Ответ с пояснениями

Условие

Разработайте хук‑функцию, которая будет вести себя как useCallback, однако не принимать массив зависимостей. Хук должен сохранять переданную функцию‑колбэк в памяти и гарантировать, что между рендерами будет возвращаться одна и та же ссылка на эту функцию.

Ответ

Если нужна именно одна исходная функция на всё время жизни экземпляра, сохраните её в useRef. Но она сохранит замыкание первого рендера и не начнёт автоматически видеть новые props/state.

function useStableCallback(callback) {
  const first = React.useRef(callback);
  return first.current;
}

Это семантика сохранения первоначального callback, а не аналога useCallback без второго аргумента: стандартный useCallback без зависимостей не даёт такой стабильности. Если нужна стабильная ссылка с актуальной логикой, возвращайте постоянную обёртку, вызывающую callback из другого ref, обновляемого после commit. Такой event-wrapper имеет иной контракт и не предназначен для вызова во время render.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее