> Рендерится ли дочерний React компонент, если родительский отрендерился, а пропсы не изменились? (React)
Уровень: middle · Роль: frontend · Категория: Технические вопросы
Компании: Иннотех, Софт Медиа Групп, Сфера
Стек: React
> Пример ответа
По умолчанию - да, дочерний компонент перерендерится, если перерендерился родитель, даже если пропсы не изменились. Это связано с тем, что React по умолчанию не сравнивает пропсы дочернего компонента при повторном рендере родителя - он просто выполняет его функцию (или метод render для классовых компонентов).
Однако есть способы это предотвратить:
-
React.memo для функциональных компонентов - делает поверхностное сравнение пропсов и пропускает рендер, если они не изменились.
-
shouldComponentUpdate или PureComponent для классовых компонентов.
Пример с React.memo:
JSXconst 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.
Без оптимизаций каждый рендер родителя вызывает рендер всех дочерних компонентов, независимо от пропсов.
> Похожие задачи по frontend
Нужно ли добавлять Promise к выходному типу асинхронной функции в TypeScript
Как избежать проброса пропсов через несколько компонентов в React
Что такое серверный рендеринг в Next.js
Что такое props и state в React и в чем их разница?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью