Atomico — это современная библиотека для создания веб-компонентов на базе JavaScript, обеспечивающая реактивность и модульность. Центральной концепцией является использование шаблонов для описания структуры компонентов. Шаблоны в Atomico строятся с применением JSX-подобного синтаксиса, который компилируется в нативные DOM-элементы и связывается с реактивным состоянием.
htmlДля создания шаблонов используется функция html,
предоставляемая Atomico. Она позволяет описывать разметку компонентов
через шаблонные литералы:
import { html, component } from "atomico";
function Button() {
return html`
<button class="primary">Нажми меня</button>
`;
}
customElements.define("my-button", component(Button));
Ключевые моменты:
html возвращает объект, который интерпретируется
движком Atomico как виртуальный DOM.${}.Выражения внутри ${} могут быть любыми: переменными,
функциями или вычислениями. Atomico автоматически отслеживает изменения
реактивного состояния и обновляет DOM:
import { html, useState, component } from "atomico";
function Counter() {
const [count, setCount] = useState(0);
return html`
<div>
<p>Счётчик: ${count}</p>
<button oncl ick=${() => setCount(count + 1)}>Увеличить</button>
</div>
`;
}
Особенности:
useState автоматически
отражаются в шаблоне.${}.Атрибуты элементов могут быть привязаны к переменным:
const isActive = true;
html`<div class=${isActive ? "active" : "inactive"}></div>`;
События подключаются через JSX-подобный синтаксис:
html`<button oncl ick=${() => console.log("Clicked")}>Клик</button>`;
Особенности:
oninput, onchange,
onmouseover).Для условного отображения элементов применяется стандартный Jav * aScript:
const show = true;
html`
<div>
${show ? html`<p>Элемент видим</p>` : null}
</div>
`;
null или undefined исключает
элемент из DOM.Atomico позволяет динамически создавать списки элементов с помощью
map:
const items = ["Яблоко", "Банан", "Апельсин"];
html`
<ul>
${items.map(item => html`<li>${item}</li>`)}
</ul>
`;
${items.map(item => html`<li key=${item}>${item}</li>`)}
Atomico поддерживает встроенные стили через тег css:
import { css } from "atomico";
const style = css`
button {
background: blue;
color: white;
border: none;
padding: 0.5rem 1rem;
}
`;
function StyledButton() {
return html`
<div>
<style>${style}</style>
<button>Стилизованная кнопка</button>
</div>
`;
}
Шаблоны легко комбинировать, создавая иерархию компонентов:
function Item({ name }) {
return html`<li>${name}</li>`;
}
function ItemList({ items }) {
return html`
<ul>
${items.map(item => html`<${Item} name=${item} />`)}
</ul>
`;
}
<${Component} ... /> позволяет
вставлять компонент в шаблон.Atomico поддерживает фрагменты — группы элементов без обертки:
html`
<>
<p>Первый элемент</p>
<p>Второй элемент</p>
</>
`;
html.${} позволяет динамически
обновлять содержимое.css, так и
глобальной при необходимости.Шаблоны Atomico объединяют реактивность, динамическую разметку и простоту JSX-подобного синтаксиса, делая их ядром построения современных веб-компонентов.