Haunted — это легковесная библиотека для создания веб-компонентов на основе функционального подхода, вдохновлённого React Hooks. Одним из ключевых аспектов разработки с Haunted является работа с событиями, и их корректная отладка критически важна для стабильного поведения компонентов.
В Haunted события обрабатываются через стандартные DOM-события или
кастомные события, отправляемые с помощью dispatchEvent.
Для добавления слушателя обычно используется стандартная привязка через
addEventListener или обработчики в шаблоне:
import { html, component } from 'haunted';
function ButtonComponent({ onClick }) {
return html`<button @click=${onClick}>Нажми меня</button>`;
}
customElements.define('button-component', component(ButtonComponent));
Важно понимать, что Haunted использует синтаксис @event,
который обеспечивает автоматическое удаление слушателей при
размонтировании компонента. Это предотвращает утечки памяти и
нежелательные побочные эффекты.
Кастомные события создаются с помощью CustomEvent и
могут содержать полезные данные в поле detail:
function Counter({ count }) {
const increment = () => {
const event = new CustomEvent('increment', { detail: { value: 1 }, bubbles: true });
dispatchEvent(event);
};
return html`<button @click=${increment}>+1</button>`;
}
customElements.define('counter-component', component(Counter));
Особенности отладки:
bubbles: true установлен, если событие должно достигать
родительских компонентов.detail: использовать
console.log(event.detail) для проверки передаваемых
данных.<button @click=${e => console.log('Клик произошёл', e)}>Нажми</button>
Haunted активно использует хуки useState и
useEffect. При отладке событий важно понимать, как
изменения состояния влияют на обработчики:
import { html, component, useState } from 'haunted';
function Toggle() {
const [active, setActive] = useState(false);
const toggle = () => {
setActive(!active);
console.log('Состояние переключено', !active);
};
return html`<button @click=${toggle}>${active ? 'Вкл' : 'Выкл'}</button>`;
}
customElements.define('toggle-button', component(Toggle));
Особенность Haunted — функции-обработчики всегда имеют доступ к актуальному состоянию благодаря замыканиям, но нужно помнить, что при использовании сторонних функций вне компонента состояние может быть устаревшим.
@event в Haunted освобождает от необходимости вручную
удалять обработчики, но если слушатель добавлен через
addEventListener в useEffect, нужно возвращать
функцию очистки:import { useEffect } from 'haunted';
useEffect(() => {
const handler = () => console.log('Событие');
window.addEventListener('resize', handler);
return () => window.removeEventListener('resize', handler);
}, []);
Для комплексной отладки рекомендуется структурированное логирование:
function logEvent(event) {
console.group(`Событие: ${event.type}`);
console.log('Цель:', event.target);
console.log('Текущий элемент:', event.currentTarget);
console.log('Детали:', event.detail);
console.groupEnd();
}
Использование такой функции помогает отслеживать поток событий, их всплытие и содержимое данных, что особенно полезно при работе с кастомными компонентами.
Event Inspector в DevTools.Haunted позволяет строить управляемые события в функциональном стиле, где отладка сводится к проверке состояния, корректного связывания обработчиков и анализа всплытия событий. Правильная организация слушателей и логирование делают процесс разработки прозрачным и предсказуемым.