intermediate
Custom events
Используйте CustomEvent для слабосвязанного обмена в браузере, контролируя detail, bubbling и границы компонентов.
CustomEvent позволяет публиковать семантические события без жёсткой связи вызывающего кода с деталями реализации. Событие может нести detail и включать bubble или пересечение границ shadow. Полезно для web components и изолированных виджетов, но владение состоянием приложения должно оставаться явным.
panel.dispatchEvent(
new CustomEvent('panel:save', {
bubbles: true,
composed: true,
detail: { id: panel.dataset.id },
})
);
Потребители должны воспринимать detail как read-only уведомление. Изменяемые общие объекты в detail незаметно связывают соседние модули.
На интервью: когда custom events чище прямых callback и когда превращаются в скрытый глобальный control flow.
Типовые ошибки: крупный изменяемый detail; события — уведомления, не замена явной модели состояния.
Компромисс: удобство против контроля — выбирайте механизм под вашу связность и бюджет производительности.
Чеклист:
- Семантические имена и документация.
- Маленький detail, по возможности неизменяемый.
- Осознанно выбирайте bubbling и composed.
- Не делайте события единственным источником истины.