Atomico — это современная библиотека для создания веб-компонентов на JavaScript с декларативным и реактивным подходом. Основой работы является функциональный компонент, который возвращает JSX-подобную разметку, а управление состоянием и жизненным циклом реализуется через специальные хуки. Понимание жизненного цикла компонентов в Atomico критически важно для корректного управления состоянием, подписками и побочными эффектами.
Инициализация начинается с вызова функции component(),
которая принимает два обязательных аргумента: функцию компонента и
объект опций. Пример базовой декларации:
import { c, useState, useEffect } from "atomico";
function MyComponent() {
const [count, setCount] = useState(0);
return <button oncl ick={() => setCount(count + 1)}>{count}</button>;
}
export const myComponent = c(MyComponent);
На этапе инициализации Atomico:
useState.Монтирование — это момент, когда компонент становится частью DOM. На этом этапе происходит:
useEffect, которые зависят от
пустого массива зависимостей ([]), аналогично
componentDidMount в React.Пример использования useEffect для монтирования:
import { c, useEffect } from "atomico";
function Timer() {
useEffect(() => {
const interval = setInterval(() => console.log("tick"), 1000);
return () => clearInterval(interval); // очистка при размонтировании
}, []);
return <span>Таймер запущен</span>;
}
export const timer = c(Timer);
Здесь useEffect с пустым массивом зависимостей
выполняется один раз при монтировании, а функция очистки — при
размонтировании.
Обновление компонента происходит при изменении состояния или свойств (props). Atomico обеспечивает реактивное обновление через:
useState и useReducer для локального
состояния.useProps для отслеживания изменений атрибутов
компонента.Пример реакции на изменение свойства:
import { c, useProps } from "atomico";
function Greeting() {
const props = useProps();
return <p>Привет, {props.name}!</p>;
}
export const greeting = c(Greeting);
При изменении атрибута name в DOM:
<greeting name="Алексей"></greeting>
Компонент автоматически перерисует текст, демонстрируя реактивное обновление.
Особенности обновления:
useEffect с зависимостями выполняется только при
изменении этих зависимостей.useEffect.Размонтирование происходит, когда компонент удаляется из DOM. На этом этапе:
cleanup) из
useEffect.Пример размонтирования:
useEffect(() => {
const handleResize = () => console.log(window.innerWidth);
window.addEventListener("resize", handleResize);
return () => window.removeEventListener("resize", handleResize);
}, []);
Функция очистки гарантирует, что после удаления компонента из DOM не останется висящих обработчиков.
Atomico использует функциональный подход и хуки, что позволяет
избежать громоздкой структуры connectedCallback,
disconnectedCallback и
attributeChangedCallback стандартных веб-компонентов.
Основные соответствия:
| Жизненный цикл Atomico | Классические веб-компоненты |
|---|---|
Инициализация через useState и
useProps |
constructor() |
Монтирование через useEffect([]) |
connectedCallback() |
| Обновление через реактивные хуки | attributeChangedCallback() и ручная проверка |
Размонтирование через return в
useEffect |
disconnectedCallback() |
Такой подход позволяет более удобно управлять состоянием и побочными эффектами без необходимости вручную синхронизировать свойства и DOM.
useEffect с корректной функцией очистки.useProps,
чтобы компонент оставался полностью реактивным.useMemo или useCallback, чтобы предотвратить
лишние обновления.Atomico обеспечивает чистый, функциональный жизненный цикл
веб-компонента, совмещая реактивность и декларативность. Понимание
работы хуков useState, useProps и
useEffect позволяет строить масштабируемые и
производительные компоненты, где каждое состояние, свойство и побочный
эффект управляется безопасно и предсказуемо.