> Будет ли работать React.memo если пропсы передаются в виде объекта, который меняется по ссылке (React)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Иннотех
Стек: React
> Пример ответа
React.memo не сработает, если пропсы передаются в виде объекта, который меняется по ссылке при каждом рендере. Это связано с тем, что React.memo по умолчанию выполняет поверхностное сравнение (shallow comparison) предыдущих и новых пропсов. Если объект создается заново (например, { key: value } внутри компонента или при вызове функции), его ссылка будет отличаться, и React.memo посчитает пропсы измененными, вызывая ререндер.
Пример проблемы:
JSXconst Child = React.memo(({ data }) => {console.log('Рендер');return <div>{data.name}</div>;});function Parent() {const obj = { name: 'test' }; // новый объект при каждом рендереreturn <Child data={obj} />;}
Здесь Child будет ререндериться каждый раз, несмотря на React.memo.
Решение: стабилизировать ссылку с помощью useMemo или useState:
JSXconst obj = useMemo(() => ({ name: 'test' }), []);
Или вынести объект за пределы компонента, если он статичен.
> Похожие задачи по frontend
В чем разница функциональных и классовых компонентов в React?
В чем разница между вызовом компонента как функции и вызовом через JSX в React
Почему React работает быстро, как устроен виртуальный DOM и процесс обновления?
Как реализовать React компонент с текстовым полем для запроса к API, отображением результатов, индикатором загрузки и обработкой ошибок?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью