SkateJS — это современная библиотека для создания веб-компонентов на JavaScript, которая позволяет строить декларативные пользовательские элементы с использованием реактивного подхода. Центральной концепцией в SkateJS является рендеринг, который определяет, как компонент отображает своё состояние в DOM.
Рендеринг в SkateJS основывается на двух ключевых принципах: свойства компонента (props) и реактивное обновление DOM. Каждое изменение свойств автоматически может инициировать перерасчёт отображаемого контента без ручного вмешательства.
renderВ SkateJS для определения визуального содержимого компонента
используется метод render. Он вызывается библиотекой
автоматически при создании компонента и при изменении его свойств.
Пример базового компонента с использованием render:
import { define, Component, h } from 'skatejs';
class MyComponent extends Component {
static get props() {
return {
name: String
};
}
renderCallback() {
return (
<div>
Привет, {this.name}!
</div>
);
}
}
define('my-component', MyComponent);
Ключевые моменты:
renderCallback() — метод, который SkateJS вызывает для
получения нового состояния DOM.h() — функция для создания виртуальных DOM-элементов
(аналог JSX или гипервиртуального DOM).SkateJS автоматически отслеживает изменения свойств компонента,
заданных в props. При изменении значения свойства
выполняется повторный вызов
renderCallback, что обновляет DOM без
необходимости вручную управлять элементами.
const element = document.createElement('my-component');
element.name = 'Алексей';
document.body.appendChild(element);
// Позже
element.name = 'Мария'; // DOM обновится автоматически
SkateJS использует легковесный виртуальный DOM для минимизации прямых операций с реальным DOM. Это обеспечивает:
Компоненты могут включать условный рендеринг на основе состояния или свойств:
renderCallback() {
return (
<div>
{this.name ? <span>Привет, {this.name}</span> : <span>Имя не указано</span>}
</div>
);
}
SkateJS корректно обрабатывает ветвления, сохраняя DOM-узлы, которые не изменились, и удаляя только устаревшие.
Для добавления обработчиков событий используется синтаксис, аналогичный React:
renderCallback() {
return (
<button oncl ick={() => alert(`Привет, ${this.name}`)}>
Кликни меня
</button>
);
}
Обработчики можно привязывать к свойствам компонента, что обеспечивает динамическое поведение кнопок и интерактивных элементов без ручной регистрации событий.
SkateJS поддерживает использование Shadow DOM для компонентов, обеспечивая изоляцию стилей и предотвращение конфликтов с глобальными CSS:
class ShadowComponent extends Component {
static get props() { return { text: String }; }
static get useShadow() { return true; }
renderCallback() {
return (
<p>{this.text}</p>
);
}
}
useShadow = true создаёт shadow root для
компонента.SkateJS предлагает ряд хук-функций жизненного цикла, которые позволяют управлять рендерингом:
connectedCallback() — вызывается при добавлении
компонента в DOM.disconnectedCallback() — вызывается при удалении
компонента.renderCallback() — возвращает виртуальный DOM для
отображения.updatedCallback(prevProps, prevState) — вызывается
после обновления свойств или состояния, позволяет выполнять побочные
эффекты.Пример использования:
updatedCallback(prevProps) {
if (prevProps.name !== this.name) {
console.log(`Имя изменилось с ${prevProps.name} на ${this.name}`);
}
}
SkateJS поддерживает композицию компонентов. Один компонент может
включать другие компоненты в renderCallback:
renderCallback() {
return (
<div>
<my-component name={this.name}></my-component>
<p>Дополнительная информация</p>
</div>
);
}
Основные возможности рендеринга в SkateJS сводятся к реактивному обновлению DOM через виртуальный DOM, условному отображению, управлению событиями и изоляции стилей с помощью Shadow DOM. Это делает SkateJS мощным инструментом для создания масштабируемых и поддерживаемых веб-компонентов, обеспечивая лёгкий и предсказуемый рендеринг.