Haunted — это легковесная библиотека для создания веб-компонентов на
базе функциональных подходов и реактивного обновления состояния. Одним
из ключевых аспектов эффективного использования Haunted является
понимание порядка выполнения эффектов
(useEffect) и их взаимодействия с жизненным циклом
компонентов.
useEffectВ Haunted useEffect используется для выполнения побочных
эффектов, таких как:
Синтаксис идентичен React:
import { useEffect } from 'haunted';
useEffect(() => {
// Код эффекта
return () => {
// Очистка эффекта
};
}, [dependencies]);
Если массив зависимостей пустой [], эффект выполняется
один раз после первой отрисовки. Если зависимости указаны, эффект
повторяется при их изменении.
Инициализация компонента Когда компонент впервые
монтируется, Haunted выполняет функции useEffect после
того, как DOM обновлён. Это гарантирует, что все изменения в DOM
доступны внутри эффекта.
Очистка предыдущего эффекта При повторном вызове эффекта (при изменении зависимостей) Haunted сначала выполняет функцию очистки предыдущего эффекта, затем запускает новый эффект.
useEffect(() => {
console.log('Эффект активирован');
return () => console.log('Очистка эффекта');
}, [dependency]);
Вывод в консоль при изменении dependency будет:
Очистка эффекта
Эффект активирован
useEffect, не
может быть async напрямую. Необходимо использовать вложенные
функции:useEffect(() => {
let canceled = false;
async function fetchData() {
const response = await fetch('/api/data');
const data = await response.json();
if (!canceled) {
console.log(data);
}
}
fetchData();
return () => {
canceled = true;
};
}, []);
Такой подход предотвращает обновление состояния после размонтирования компонента.
useState
инициирует повторный рендер компонента.useEffect с
изменившимися зависимостями.Важно помнить, что эффекты не блокируют рендер. Это позволяет компоненту отображаться быстро, а побочные действия выполняются после обновления DOM.
Если в компоненте несколько вызовов useEffect, их
порядок выполнения соответствует порядку объявления в коде. Очистка
также выполняется в обратном порядке — последний эффект очищается
первым.
useEffect(() => {
console.log('Первый эффект');
return () => console.log('Очистка первого эффекта');
}, []);
useEffect(() => {
console.log('Второй эффект');
return () => console.log('Очистка второго эффекта');
}, []);
Вывод при размонтировании:
Очистка второго эффекта
Очистка первого эффекта
useEffect и рендеринга HauntedПонимание порядка вызова и очистки эффектов является ключевым для стабильной работы Haunted-компонентов, предотвращения утечек памяти и корректного управления состоянием.