Вопрос проверяет знание хуков мемоизации и умение стабилизировать ссылки на функции.
Чтобы функция не ломала мемоизацию, её нужно мемоизировать. Для этого используют useCallback. Он возвращает одну и ту же ссылку между рендерами, пока зависимости не изменятся. Это позволяет React.memo корректно сравнивать пропсы. Но использовать useCallback стоит осознанно.
Решение проблемы нестабильных функций — управление ссылками.
useCallbackuseCallback мемоизирует функцию:
const handleClick = useCallback(() => {
doSomething(id);
}, [id]);
Теперь:
ссылка на функцию стабильна
функция меняется только при изменении id
React.memo может корректно работать
В массив зависимостей нужно включать:
все переменные из внешнего scope
значения, используемые внутри функции
Пропуск зависимостей приводит к:
устаревшим данным
логическим ошибкам
useCallback не нуженНе стоит использовать useCallback, если:
компонент не мемоизирован
функция не передаётся в дочерние компоненты
оптимизация не требуется
useCallback:
хранит функцию в памяти
требует сравнения зависимостей
может быть дороже, чем пересоздание функции
Чтобы функция не ломала мемоизацию, нужно стабилизировать её ссылку с помощью useCallback. Этот хук полезен только в сочетании с React.memo и дорогими компонентами.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию