Slim.js — легковесная библиотека для создания компонентов в JavaScript, ориентированная на декларативный подход и реактивность. Центральным элементом работы с компонентами является жизненный цикл, который управляет созданием, обновлением и удалением компонентов из DOM. Понимание жизненного цикла позволяет эффективно управлять состоянием, оптимизировать производительность и организовывать асинхронные операции.
Компонент в Slim.js создаётся с помощью объявления класса,
наследующегося от Slim:
class MyComponent extends Slim {
constructor() {
super();
this.message = 'Hello, Slim!';
}
get template() {
return `<p>{{message}}</p>`;
}
}
customElements.define('my-component', MyComponent);
constructor) выполняется
один раз при создании экземпляра компонента.После вставки компонента в DOM вызывается метод
connectedCallback:
connectedCallback() {
super.connectedCallback();
console.log('Компонент подключен к DOM');
}
Особенности connectedCallback:
Slim.js использует двустороннюю привязку данных и
реактивность. Свойства, определённые через this,
автоматически отслеживаются. Для реактивного обновления можно
использовать this.trigger() или модифицировать свойства
напрямую:
this.message = 'Updated message';
Обновление свойства вызывает повторный рендер компонента, автоматически синхронизируя DOM с новым состоянием.
Метод attributeChangedCallback(name, oldValue, newValue)
отслеживает изменения атрибутов:
attributeChangedCallback(name, oldValue, newValue) {
if (name === 'data-title') {
this.title = newValue;
}
}
static get observedAttributes() {
return ['data-title', 'data-value'];
}
Slim.js использует шаблонный рендеринг через геттер
template. При изменении свойств:
key) для оптимизации.Пример условного рендеринга:
get template() {
return `
<div>
{{#if showMessage}}
<p>{{message}}</p>
{{/if}}
</div>
`;
}
{{#if ...}} позволяет управлять видимостью элементов
без удаления компонента полностью.Метод disconnectedCallback вызывается при удалении
компонента из DOM:
disconnectedCallback() {
super.disconnectedCallback();
console.log('Компонент удалён из DOM');
// Очистка ресурсов
clearInterval(this.timer);
}
Для асинхронных операций (загрузка данных, API-запросы) рекомендуется:
connectedCallback.disconnectedCallback для отмены или
очистки промисов и подписок.Пример:
connectedCallback() {
super.connectedCallback();
this.fetchData();
}
async fetchData() {
const response = await fetch('/api/data');
if (this.isConnected) {
this.data = await response.json();
}
}
Slim.js позволяет комбинировать конструктор,
connectedCallback, attributeChangedCallback и
disconnectedCallback для полной настройки поведения
компонента. Хорошая практика:
connectedCallback — подключение к DOM и внешним
ресурсам.attributeChangedCallback — реакция на изменения
атрибутов.disconnectedCallback — очистка ресурсов.Эта структура обеспечивает предсказуемое поведение компонентов, минимизирует ошибки при динамическом добавлении и удалении элементов и позволяет использовать реактивные возможности Slim.js на полную мощность.
connectedCallback может вызываться многократно при
перемещении элемента в DOM.attributeChangedCallback вызывается только при
изменении наблюдаемых атрибутов.attributeChangedCallback — лучше изменять свойства,
которые автоматически триггерят рендер.Жизненный цикл в Slim.js — фундамент для построения устойчивых, реактивных компонентов с предсказуемым поведением, позволяющий управлять ресурсами и асинхронными операциями без утечек памяти.