В Atomico компонент представляет собой функцию, которая возвращает JSX-разметку. Основная цель компонента — описать, как должен выглядеть и вести себя элемент интерфейса, а также какие данные он использует для рендеринга.
import { c, html } from "atomico";
function MyComponent() {
return html`
Привет, Atomico!
`;
}
customElements.define("my-component", c(MyComponent));
cФункция c — ядро процесса инициализации. Она принимает
компонент и возвращает класс, совместимый с Custom
Elements, что позволяет использовать компонент как обычный
HTML-тег:
const elementClass = c(MyComponent);
customElements.define("my-component", elementClass);
Особенности c:
useState, useEffect и
других реактивных механизмов Atomico.Компонент должен быть зарегистрирован через
customElements.define. Первый аргумент — это имя нового
тега, второй — класс, возвращаемый функцией c.
customElements.define("user-card", c(UserCard));
После этого компонент можно использовать в HTML:
Atomico поддерживает реактивные свойства. Они определяются через
статическое свойство props функции компонента:
function UserCard({ name, age }) {
return html`
Имя: ${name}
Возраст: ${age}
`;
}
UserCard.props = {
name: String,
age: Number
};
customElements.define("user-card", c(UserCard));
Ключевые моменты работы с props:
Atomico использует реактивную модель, основанную на хуках. После инициализации компонент автоматически реагирует на изменения props и состояния:
import { useState } from "atomico";
function Counter() {
const [count, setCount] = useState(0);
return html`
Счетчик: ${count}
`;
}
customElements.define("counter-element", c(Counter));
Особенности реактивности:
useState возвращает массив
[значение, функция изменения].Atomico позволяет использовать CSS внутри компонента через шаблон
html:
function StyledBox() {
return html`
Стилизация встроена
`;
}
customElements.define("styled-box", c(StyledBox));
Преимущества встроенных стилей:
События обрабатываются как обычные атрибуты DOM-элементов. Atomico автоматически связывает их с функциями:
function ClickableButton() {
const handleClick = () => alert("Нажато!");
return html`
`;
}
customElements.define("clickable-button", c(ClickableButton));
Особенности событий:
addEventListener.useState для реактивного
обновления интерфейса.Atomico поддерживает стандартные слоты Shadow DOM, что позволяет компоновать компоненты:
function Card() {
return html`
`;
}
customElements.define("custom-card", c(Card));
В HTML это выглядит так:
Контент внутри слота
Слоты позволяют создавать гибкие компоненты, где структура определяется потребителем, а логика и стили остаются инкапсулированными.
Свойства можно задавать с начальными значениями, что особенно полезно для повторно используемых компонентов:
function Badge({ label = "Новый", color = "blue" }) {
return html`${label}`;
}
Badge.props = {
label: String,
color: String
};
customElements.define("badge-element", c(Badge));
Это упрощает интеграцию и снижает количество boilerplate-кода при использовании компонентов.