Если нужна именно одна исходная функция на всё время жизни экземпляра, сохраните её в useRef. Но она сохранит замыкание первого рендера и не начнёт автоматически видеть новые props/state.
Создание собственного хука‑мемоизатора, аналогичного useCallback без списка зависимостей
Если нужна именно одна исходная функция на всё время жизни экземпляра, сохраните её в 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.