Атрибуты компонентов в Atomico — это способ передачи данных внутрь веб-компонента через HTML-разметку. Они выступают интерфейсом между DOM и логикой компонента, обеспечивая реактивность и типизацию значений.
В Atomico атрибуты задаются с помощью функции props
внутри компонента. Каждое свойство может иметь:
String,
Number, Boolean, Object,
Array, Function)Пример объявления атрибутов:
import { c, useState, props } from "atomico";
function Counter({ count }) {
const [value, setValue] = useState(count);
return (
<button oncl ick={() => setValue(value + 1)}>
{value}
</button>
);
}
Counter.props = {
count: {
type: Number,
default: 0
}
};
export const counter = c(Counter);
Здесь count — атрибут типа Number с
дефолтным значением 0. Передача через HTML:
<counter count="5"></counter>
Atomico автоматически преобразует строковое значение "5"
в число.
Atomico поддерживает строгую типизацию. Основные правила:
true, отсутствие — false.Пример Boolean-атрибута:
Toggle.props = {
active: {
type: Boolean,
default: false
}
};
HTML:
<toggle active></toggle> <!-- active === true -->
<toggle></toggle> <!-- active === false -->
Изменение атрибута на DOM-узле автоматически обновляет состояние компонента. Atomico связывает DOM с внутренними свойствами:
<counter id="myCounter" count="10"></counter>
<script>
const counter = document.getElementById("myCounter");
setTimeout(() => {
counter.count = 20; // UI обновится автоматически
}, 1000);
</script>
Внутри компонента count обновляется реактивно, вызывая
повторный рендер.
Атрибуты объектов и массивов передаются через JSON:
List.props = {
items: {
type: Array,
default: () => []
}
};
HTML:
<list items='["яблоко","банан","груша"]'></list>
Atomico автоматически парсит JSON и превращает его в массив внутри компонента.
Можно определить пользовательский валидатор:
UserCard.props = {
age: {
type: Number,
validate: value => value >= 0 && value <= 120,
default: 18
}
};
Если значение не проходит валидацию, Atomico использует значение по умолчанию.
Для всех типов можно задать дефолтные значения. Для объектов и массивов — через функцию:
Gallery.props = {
images: {
type: Array,
default: () => []
}
};
Использование функции предотвращает совместное использование ссылок на один объект между экземплярами компонентов.
Свойства типа Function позволяют передавать обработчики
событий:
Button.props = {
onClick: Function
};
<Button onCl ick={() => console.log("Нажато")}></Button>
Внутри компонента можно вызвать переданную функцию напрямую:
<button oncl ick={onClick}>Клик</button>
Atomico делает работу с атрибутами простой, но гибкой, позволяя создавать динамические и управляемые веб-компоненты без дополнительного кода для синхронизации состояния.