SkateJS предоставляет мощные возможности для работы с
пользовательскими веб-компонентами, включая строгую валидацию и
трансформацию значений свойств. Эта функциональность встроена в систему
props и позволяет контролировать типы данных,
предустановленные значения, а также автоматическую конвертацию перед
использованием внутри компонента.
Каждое свойство компонента в SkateJS определяется через объект
props:
import { define, props, Component } from 'skatejs';
class MyComponent extends Component {
static props = {
age: props.number({ default: 18 }),
name: props.string({ default: 'Anonymous' }),
isActive: props.boolean()
};
}
define(MyComponent);
Ключевые моменты:
props.number, props.string,
props.boolean автоматически приводят значения к нужному
типу.default задаёт значение свойства по умолчанию при
отсутствии присвоенного значения.Помимо встроенных типов, возможна реализация кастомной валидации
через функцию validate:
static props = {
score: props.number({
validate: value => value >= 0 && value <= 100
})
};
validate получает текущее присваиваемое
значение.false, SkateJS не обновляет
свойство и выводит предупреждение в консоль.coerceИногда требуется автоматически преобразовывать данные перед
сохранением в свойстве. Для этого используется coerce:
static props = {
tags: props.array({
coerce: value => Array.isArray(value) ? value : String(value).split(',')
})
};
coerce вызывается каждый раз перед обновлением значения
свойства.validate, обеспечивая сначала
корректное преобразование, затем проверку.default, coerce и validateПорядок обработки свойства SkateJS следующий:
coerce (если
указано).validate (если
указано).updated
callback.Пример:
static props = {
quantity: props.number({
default: 1,
coerce: value => Math.floor(value),
validate: value => value > 0
})
};
coerce), затем проверяется на положительность
(validate), и только после этого сохраняется.SkateJS поддерживает работу с объектами и массивами через типы
props.object и props.array. Для сложных
структур можно использовать coerce и кастомные
валидаторы:
static props = {
config: props.object({
coerce: value => ({
enabled: !!value.enabled,
threshold: value.threshold || 0
}),
validate: value => typeof value.enabled === 'boolean' && value.threshold >= 0
})
};
coerce гарантирует наличие всех необходимых ключей с
корректными типами.validate обеспечивает бизнес-логику проверки
значений.Свойства, определённые через props, автоматически
синхронизируются с атрибутами HTML, если они имеют соответствующие типы.
SkateJS обеспечивает:
string, number,
boolean).updated) только
после успешной проверки и трансформации.Пример:
class ToggleButton extends Component {
static props = {
checked: props.boolean({ default: false })
};
updated(prevProps) {
if (prevProps.checked !== this.checked) {
this.renderCheckedState();
}
}
renderCheckedState() {
this.setAttribute('aria-pressed', String(this.checked));
}
}
define(ToggleButton);
checked сначала проходит
через встроенный coerce для Boolean, затем обновляется DOM
через метод updated.coerce для приведения типов, особенно при
работе с данными из атрибутов или внешних источников.validate) должны проверять бизнес-логику,
диапазоны или обязательные условия.coerce и
validate, чтобы предотвратить ошибки при работе с
динамическими данными.default значения для ключевых свойств,
чтобы избежать неопределённых состояний компонента.Валидация и трансформация значений в SkateJS создают основу для надёжных, предсказуемых и реактивных веб-компонентов, позволяя строго контролировать данные, поступающие внутрь и выводимые наружу.