> Перерисуется ли React-компонент при изменении пропсов? (React)
Уровень: middle · Роль: frontend · Категория: Технические вопросы
Компании: Сбер
Стек: React
> Пример ответа
Да, React-компонент перерисовывается при изменении пропсов, но с важными нюансами. По умолчанию, когда родительский компонент обновляется, React рекурсивно перерисовывает все дочерние компоненты, даже если их пропсы не изменились. Это связано с тем, что React сравнивает виртуальные DOM-деревья, а не значения пропсов напрямую.
Однако есть способы оптимизации:
-
React.memo- оборачивает компонент и предотвращает перерисовку, если пропсы остались прежними (поверхностное сравнение). -
useMemoиuseCallback- помогают избежать создания новых ссылок на объекты/функции, что часто вызывает ложные перерисовки.
Пример:
JSXconst Child = React.memo(({ value }) => {console.log('Render');return <div>{value}</div>;});function Parent() {const [count, setCount] = useState(0);return (<><button onClick={() => setCount(c => c + 1)}>+</button><Child value="static" /></>);}
Здесь Child не перерисуется при клике, так как пропс value не меняется, а компонент обёрнут в React.memo. Без React.memo он бы перерисовывался каждый раз при обновлении Parent.
> Похожие задачи по frontend
Как передаются данные и токены между нативным приложением и React WebView
В чем особенность алгоритма diffing и почему React работает быстро
Какая проблема при вызове fetch напрямую в компоненте Next.js
Как можно закэшировать данные useSWR, чтобы при возврате на страницу данные брались из кэша
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью