Atomico — это современная библиотека для построения веб-компонентов на основе функционального подхода, ориентированного на реактивность и декларативное управление состоянием. Одной из ключевых особенностей является возможность работы с утилитарными типами, которые упрощают создание, управление и композицию компонентов.
atom — реактивные
состоянияatom используется для создания реактивного состояния
внутри компонента. Основная идея заключается в том, что любое значение,
обернутое в atom, становится реактивным: изменение этого
значения автоматически инициирует перерисовку компонента.
import { atom } from 'atomico';
const count = atom(0);
function Counter() {
return <host>
<button onCl ick={() => count.value--}>-</button>
<span>{count.value}</span>
<button onCl ick={() => count.value++}>+</button>
</host>
}
Ключевые моменты:
atom возвращает объект с ключом
value.value вызывает повторный рендер.computed —
производные состоянияcomputed позволяет создавать вычисляемые
значения, которые автоматически обновляются при изменении
зависимых атомов. Это облегчает работу с динамическими данными без
необходимости вручную подписываться на изменения.
import { atom, computed } from 'atomico';
const count = atom(0);
const double = computed(() => count.value * 2);
function Counter() {
return <host>
<button onCl ick={() => count.value++}>+</button>
<span>{double.value}</span>
</host>
}
Особенности:
computed зависит от атомов или других вычисляемых
значений.value.useEffect
и реактивные побочные эффектыAtomico наследует концепцию реактивных побочных эффектов, аналогичную
React. С помощью useEffect можно реагировать на изменения
атомов и выполнять побочные действия, например, сетевые запросы или
локальное хранение состояния.
import { atom, useEffect } from 'atomico';
const name = atom("");
useEffect(() => {
console.log("Имя изменилось:", name.value);
}, [name]);
Важно:
useContext и
передача состоянийДля передачи данных между компонентами без прокидывания пропсов
используется контекст. Atomico предоставляет useContext,
который работает аналогично стандартной концепции контекста в React, но
полностью интегрирован с реактивными атомами.
import { createContext, useContext, atom } from 'atomico';
const ThemeContext = createContext(atom("light"));
function Toolbar() {
const theme = useContext(ThemeContext);
return <host class={theme.value}>Панель инструментов</host>;
}
function App() {
const theme = atom("dark");
return <ThemeContext.Provider value={theme}>
<Toolbar />
</ThemeContext.Provider>
}
Особенности:
ref — ссылка на
DOM-узлыref позволяет получать прямой доступ к элементам DOM в
компоненте. Это полезно для фокусировки, измерений или интеграции с
внешними библиотеками.
import { useRef } from 'atomico';
function InputFocus() {
const inputRef = useRef();
return <host>
<input ref={inputRef} />
<button onCl ick={() => inputRef.current.focus()}>Фокус</button>
</host>
}
Примечания:
useRef возвращает объект с ключом
current.current всегда содержит актуальный DOM-узел после
рендера.watch — наблюдение
за изменениямиwatch позволяет следить за изменениями атомов и
выполнять действия без рендера. Отличается от useEffect
тем, что не инициирует повторный рендер, а работает как чистый
наблюдатель.
import { atom, watch } from 'atomico';
const counter = atom(0);
watch(counter, (value) => {
console.log("Счётчик изменился на", value);
});
Особенности:
Atomico позволяет комбинировать атомы, computed, watch и эффекты для построения сложных реактивных систем. Такой подход облегчает управление состоянием и делает компоненты более декларативными.
import { atom, computed, watch } from 'atomico';
const base = atom(2);
const exponent = atom(3);
const power = computed(() => Math.pow(base.value, exponent.value));
watch(power, (value) => {
console.log(`Результат возведения ${base.value} в ${exponent.value} равен ${value}`);
});
Комбинирование этих типов позволяет строить реактивные цепочки зависимостей, где любое изменение автоматически обновляет связанные вычисления и эффекты.
Утилитарные типы Atomico — это фундамент для построения реактивных компонентов:
atom — основной строительный блок состояния.computed — производные значения для динамических
вычислений.useEffect — побочные эффекты с подпиской на
изменения.useContext — передача состояния между
компонентами.useRef — доступ к DOM-узлам.watch — наблюдение за изменениями без перерисовки.Совокупность этих типов формирует сильную реактивную модель, позволяя строить масштабируемые и легко управляемые компоненты.