Проверяет понимание назначения useMemo и того, почему вызов setState внутри него нарушает правила React и приводит к неожиданному поведению.
useMemo — это хук, который кэширует результат вычисления между рендерами. Его единственная задача — вернуть мемоизированное значение, чтобы не пересчитывать тяжёлые операции при каждом рендере. React ожидает, что функция внутри useMemo будет чистой: без побочных эффектов, без мутаций внешних данных и без вызовов setState.
Если нужно обновить состояние на основе вычисленного значения, делайте это в useEffect или прямо в обработчике события. useMemo должен только возвращать значение.
// Плохо: setState внутри useMemo
const value = useMemo(() => {
setCount(count + 1); // побочный эффект
return heavyCalc(count);
}, [count]);
// Хорошо: чистое вычисление + эффект отдельно
const value = useMemo(() => heavyCalc(count), [count]);
useEffect(() => {
setDerived(value);
}, [value]);
Итог: useMemo нужен только для мемоизации чистых вычислений. Для любых побочных эффектов, включая обновление состояния, используйте useEffect или обработчики событий — это гарантирует предсказуемое поведение и отсутствие лишних рендеров.
Уровень
Рейтинг:
4
Сложность:
4
Навыки
JavaScript
React
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию