Проверяет понимание механизма делегирования событий в React и того, как синтетические события отличаются от нативных, что важно для оптимизации и корректной работы обработчиков.
В обычном DOM, если у вас есть список из ста кнопок, и каждой нужен обработчик клика, вы можете повесить сто отдельных слушателей. Это дорого по памяти и медленно при изменениях. Делегирование событий решает эту проблему: один слушатель на родителе перехватывает всплывающие события от детей и определяет, кто именно был целью.
React реализует делегирование автоматически. Когда вы пишете onClick на элементе, React не создаёт нативный слушатель на этом элементе. Вместо этого он регистрирует один слушатель на корневом контейнере (в React 17+ — на корне приложения, ранее — на document). При клике событие всплывает до корня, React смотрит на event.target, находит соответствующий Fiber-узел и вызывает ваш обработчик.
При этом вы получаете не нативный объект события, а SyntheticEvent — кроссбраузерную обёртку с тем же API. Это даёт единообразие и позволяет React управлять жизненным циклом события.
function List() {
const handleClick = (e) => {
// e.target — реальный DOM-элемент, по которому кликнули
console.log('Clicked:', e.target.textContent);
};
return (
<ul onClick={handleClick}>
<li>Первый</li>
<li>Второй</li>
<li>Третий</li>
</ul>
);
}
Здесь один обработчик на <ul> обслуживает все <li>. Это классическое делегирование, но реализованное средствами React.
onClick на родительском компоненте сработает даже если DOM-структура вложена иначе.ReactDOM.createPortal) сохраняет всплытие по React-дереву, хотя DOM-узел находится в другом месте.onScroll, onFocus) не всплывают в DOM, но React эмулирует их всплытие через синтетическую систему.Делегирование снижает количество нативных слушателей, экономит память и упрощает динамическое добавление элементов. Вам не нужно вручную навешивать и снимать обработчики при изменении списка — React делает это за вас.
Итог: делегирование событий в React — это встроенный механизм, который избавляет разработчика от ручного управления слушателями и обеспечивает предсказуемое поведение. Понимание этой модели помогает избегать ошибок с stopPropagation, порталами и вложенными обработчиками.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию