Boolean атрибуты в веб-компонентах и в библиотеке
Atomico представляют собой особый тип свойств, которые могут принимать
только два состояния: true или false. В
отличие от обычных свойств, их присутствие в DOM указывает на значение
true, а отсутствие — на false. Atomico
предоставляет удобные средства для работы с такими атрибутами через
декларацию свойств компонента и реактивное обновление интерфейса.
В Atomico свойства компонента объявляются с помощью функции
props. Для Boolean атрибута необходимо указать его тип
Boolean:
import { c, props, html } from "atomico";
const MyCheckbox = c(() => html`
<label>
<input type="checkbox" checked="${props.checked}" />
Включить опцию
</label>
`, {
props: {
checked: Boolean
}
});
checked — Boolean атрибут, который
может быть true или false.<input> элемент использует атрибут
checked, который синхронизируется с состоянием
свойства.Boolean атрибуты в Atomico автоматически преобразуются при присвоении:
<MyCheckbox checked />
<MyCheckbox checked={false} />
true.false, то
свойство имеет значение false.Atomico отслеживает изменения Boolean свойств и автоматически обновляет DOM:
const Toggle = c(() => {
const state = useState(false);
return html`
<button onCl ick="${() => state.value = !state.value}">
${state.value ? "Включено" : "Выключено"}
</button>
<MyCheckbox checked="${state.value}" />
`;
});
state.value мгновенно синхронизируется с
атрибутом checked в дочернем компоненте.Boolean атрибуты в Atomico соответствуют стандартной модели HTML:
truefalseПример для <input>:
<input type="checkbox" checked />
<input type="checkbox" />
checked = true).checked = false).Atomico позволяет поддерживать эту синхронизацию через реактивные свойства без дополнительного кода для обновления DOM.
Для управления состоянием Boolean атрибутов часто используются
события. Например, для <input type="checkbox">:
const MyCheckbox = c(({ checked }) => {
const handleChange = (event) => {
checked.value = event.target.checked;
};
return html`
<input type="checkbox" .checked="${checked}" onCha nge="${handleChange}" />
`;
}, {
props: {
checked: Boolean
}
});
checked.value синхронизируется с состоянием
элемента..checked (с точкой) позволяет напрямую
связывать DOM свойство, а не атрибут.Atomico поддерживает проброс Boolean атрибутов в дочерние компоненты:
<MyCheckbox checked="${parentChecked}" />
parentChecked — реактивное свойство родителя.Ложные значения: Любое значение, кроме
false, null или undefined,
считается true при передаче Boolean атрибута в DOM.
<MyCheckbox checked="false" /> <!-- это будет true! -->
Чтобы корректно передавать false, необходимо
использовать checked={false} или исключать атрибут
полностью.
Свойство vs атрибут:
.checked="${value}".Реактивность: Boolean свойства полностью интегрированы с реактивной системой Atomico. Любое изменение значения мгновенно отражается в DOM, что избавляет от ручного управления состоянием.
Boolean атрибуты удобно комбинировать с условной отрисовкой и классами:
const ToggleButton = c(({ active }) => html`
<button class="${active ? 'active' : ''}">
${active ? 'Вкл' : 'Выкл'}
</button>
`, {
props: {
active: Boolean
}
});
active управляет состоянием кнопки и ее классом.Boolean атрибуты в Atomico предоставляют мощный инструмент для управления состоянием компонентов и их взаимодействием с DOM. Они облегчают синхронизацию логики и визуального состояния, сохраняя реактивность и предсказуемость поведения компонентов.