Проверяет понимание механизма ререндеринга React-компонентов и того, как отсутствие пропсов влияет на обновление дочерних компонентов.
В React ререндеринг родительского компонента по умолчанию запускает ререндеринг всех его дочерних компонентов, независимо от того, передаются ли им пропсы. Это связано с тем, что React не сравнивает пропсы автоматически — он просто вызывает функцию компонента заново, чтобы получить новое дерево элементов.
Когда состояние или пропсы родителя меняются, React помечает компонент как «грязный» и запускает его рендер. После этого он рекурсивно рендерит всех детей, даже если их входные данные не изменились. Отсутствие пропсов не является исключением — компонент всё равно вызывается.
function Child() {
console.log('Child render');
return <div>Child</div>;
}
function Parent() {
const [count, setCount] = useState(0);
return (
<>
<button onClick={() => setCount(count + 1)}>{count}</button>
<Child />
</>
);
}
При каждом клике на кнопку в консоли будет появляться «Child render», хотя Child не получает никаких пропсов.
const Child = React.memo(function Child() {
console.log('Child render');
return <div>Child</div>;
});
Теперь при изменении состояния родителя Child не будет ререндериться, так как его пропсы (пустой набор) не изменились.
Итог: по умолчанию дочерний компонент без пропсов всё равно перерендерится вместе с родителем. Если это узкое место по производительности, применяйте React.memo или архитектурные приёмы для изоляции обновлений.
Уровень
Рейтинг:
4
Сложность:
5
Навыки
JavaScript
React
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию