> Как использовать memo в React для предотвращения лишних рендеров (React)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Centicore
Стек: React
> Пример ответа
React.memo - это компонент высшего порядка (HOC), который оптимизирует производительность, предотвращая повторный рендер компонента, если его пропсы не изменились. Он работает путём поверхностного сравнения предыдущих и новых пропсов.
Пример использования:
JSXimport React, { memo } from 'react';const ExpensiveComponent = memo(({ name, age }) => {console.log('Рендер ExpensiveComponent');return <div>{name}, {age} лет</div>;});// В родительском компоненте:function App() {const [count, setCount] = useState(0);const user = { name: 'Иван', age: 30 };return (<div><button onClick={() => setCount(count + 1)}>Счётчик: {count}</button><ExpensiveComponent name={user.name} age={user.age} /></div>);}
Ключевые моменты:
-
memoсравнивает пропсы поверхностно (shallow comparison). Если передаёте объекты или массивы, они будут считаться новыми при каждом рендере родителя - используйтеuseMemoилиuseCallbackдля стабилизации ссылок. -
Применяйте
memoтолько к компонентам, которые:-
Часто ререндерятся без изменения пропсов.
-
Выполняют тяжёлые вычисления или рендерят большие списки.
-
-
Не используйте
memoдля простых компонентов - накладные расходы на сравнение могут перевесить выгоду. -
Можно передать второй аргумент - функцию кастомного сравнения:
memo(Component, (prevProps, nextProps) => { /* возвращает true, если пропсы равны */ }).
Антипаттерн: передача в memo компонента с пропсами-функциями без useCallback - функция будет создаваться заново каждый раз, и memo не сработает.
> Похожие задачи по frontend
Как сделать так, чтобы React компонент рендерился только при изменении определенного пропса
Что такое shallowRef и shallowReactive и каково их назначение во Vue
Как React отслеживает количество вызовов хуков между рендерами?
Как удалить последний элемент массива в setState без мутаций в React?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью