> Рендерится ли дочерний React компонент, если родительский отрендерился, а пропсы не изменились? (React)

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

Компании: Иннотех, Софт Медиа Групп, Сфера

Стек: React

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

По умолчанию - да, дочерний компонент перерендерится, если перерендерился родитель, даже если пропсы не изменились. Это связано с тем, что React по умолчанию не сравнивает пропсы дочернего компонента при повторном рендере родителя - он просто выполняет его функцию (или метод render для классовых компонентов).

Однако есть способы это предотвратить:

  • React.memo для функциональных компонентов - делает поверхностное сравнение пропсов и пропускает рендер, если они не изменились.

  • shouldComponentUpdate или PureComponent для классовых компонентов.

Пример с React.memo:

JSX
const Child = React.memo(({ value }) => {
console.log('Child rendered');
return <div>{value}</div>;
});
function Parent() {
const [count, setCount] = useState(0);
return (
<>
<button onClick={() => setCount(c => c + 1)}>+</button>
<Child value="static" />
</>
);
}

Здесь при клике на кнопку Parent перерендерится, но Child - нет, так как пропс "static" не изменился и используется React.memo.

Без оптимизаций каждый рендер родителя вызывает рендер всех дочерних компонентов, независимо от пропсов.

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

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