> Как правильно использовать мемоизацию в React (React)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Cyber Interactive, Spotware, ITFB, Centicore, IT-One, Арго
Стек: React
> Пример ответа
Мемоизация в React - это техника оптимизации, которая предотвращает повторные вычисления или перерисовки компонентов, если входные данные (пропсы, состояние или зависимости) не изменились. Основные инструменты:
-
React.memo- для мемоизации целого компонента. Оборачивает компонент и сравнивает пропсы поверхностно (shallow comparison). Если пропсы не изменились, компонент не перерисовывается.
Пример:JSXconst MyComponent = React.memo(({ data }) => <div>{data}</div>); -
useMemo- для мемоизации вычисляемых значений. Принимает функцию и массив зависимостей. Результат функции кешируется до изменения зависимостей.
Пример:JSXconst sortedList = useMemo(() => list.sort((a, b) => a - b), [list]); -
useCallback- для мемоизации функций. Полезно, когда функция передаётся как пропс в дочерний компонент, обёрнутый вReact.memo.
Пример:JSXconst handleClick = useCallback(() => setCount(prev => prev + 1), []);
Важные правила:
-
Не мемоизируйте всё подряд - это добавляет накладные расходы на сравнение. Используйте только при реальных проблемах производительности (например, тяжёлые вычисления или частые ререндеры).
-
Убедитесь, что зависимости в
useMemo/useCallbackуказаны корректно, иначе получите баги с устаревшими данными. -
Для примитивных пропсов (строки, числа)
React.memoработает эффективно; для объектов/массивов - только если они создаются заново редко.
Антипаттерны:
-
Мемоизация в компоненте, который и так редко перерисовывается.
-
Использование
useMemoдля простых операций (например,a + b), где кеширование дороже самого вычисления.
Правильный подход: профилируйте приложение (React DevTools, Profiler) и применяйте мемоизацию только к узким местам.
> Похожие задачи по frontend
Для чего используется React и почему его выбирают
Что такое batching в React и зачем он нужен
Как работает useEffect хук в React
Приходилось ли писать скрипты для работы с React
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью