> Будет ли работать React.memo если пропсы передаются в виде объекта, который меняется по ссылке (React)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Иннотех

Стек: React

> Пример ответа

React.memo не сработает, если пропсы передаются в виде объекта, который меняется по ссылке при каждом рендере. Это связано с тем, что React.memo по умолчанию выполняет поверхностное сравнение (shallow comparison) предыдущих и новых пропсов. Если объект создается заново (например, { key: value } внутри компонента или при вызове функции), его ссылка будет отличаться, и React.memo посчитает пропсы измененными, вызывая ререндер.

Пример проблемы:

JSX
const 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:

JSX
const obj = useMemo(() => ({ name: 'test' }), []);

Или вынести объект за пределы компонента, если он статичен.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью