Haunted — это библиотека для создания веб-компонентов с использованием реактивных хуков, аналогичных React. Отладка хуков требует понимания их жизненного цикла и особенностей работы с состоянием, эффектами и мемоизацией.
Хуки в Haunted работают строго внутри функционального компонента. Любое нарушение правил их использования приводит к непредсказуемому поведению:
Отладка часто начинается с проверки этих правил. Простой способ — использовать строгий режим и проверять консоль на предупреждения.
useState — основной инструмент хранения локального
состояния. Ошибки обычно связаны с неинициализированным
состоянием или неправильной структурой
обновления:
import { html, useState } from 'haunted';
function Counter() {
const [count, setCount] = useState(0);
return html`<button @click=${() => setCount(count + 1)}>
Счётчик: ${count}
</button>`;
}
console.log(count) внутри компонента поможет
выявить неожиданные изменения.useEffect выполняется после рендера и позволяет
управлять побочными эффектами. Ошибки часто проявляются в
неправильной зависимости:
import { html, useEffect, useState } from 'haunted';
function Timer() {
const [seconds, setSeconds] = useState(0);
useEffect(() => {
const id = setInterval(() => setSeconds(s => s + 1), 1000);
return () => clearInterval(id);
}, []);
return html`<p>Время: ${seconds}</p>`;
}
console.log внутри эффекта позволяет
убедиться, что эффект вызывается ожидаемое количество раз.useMemo и useCallback применяются для
оптимизации и предотвращения лишних пересчётов:
import { html, useMemo, useState } from 'haunted';
function Expensive({ num }) {
const result = useMemo(() => {
let sum = 0;
for (let i = 0; i < 1000000; i++) sum += num;
return sum;
}, [num]);
return html`<p>Результат: ${result}</p>`;
}
Haunted позволяет создавать собственные хуки, которые возвращают состояние, эффекты или функции:
import { useState, useEffect } from 'haunted';
function useCounter(initial = 0) {
const [count, setCount] = useState(initial);
useEffect(() => {
console.log(`Счётчик обновлён: ${count}`);
}, [count]);
return [count, setCount];
}
В Haunted каждый вызов компонента может приводить к ререндеру. Для отладки полезно:
console.log в тело компонента.return в useEffect.console.log('state updated', state).console.log('effect run', dependencies).Такой подход позволяет локализовать источник ошибки и понять, на каком этапе хуки работают некорректно.