Slim.js — это легковесная библиотека для создания Web Components в JavaScript. Она упрощает разработку компонентов, обеспечивая декларативный синтаксис, реактивность и удобное управление состоянием без необходимости использования крупных фреймворков. Основная цель Slim.js — дать возможность создавать переиспользуемые компоненты с минимальной нагрузкой на приложение.
Web Components — это стандартизированный способ создания собственных HTML-элементов с инкапсулированной логикой и стилями. Они состоят из четырех ключевых технологий:
Slim.js интегрирует эти технологии, предоставляя декларативный синтаксис и реактивные возможности, похожие на фреймворки, но без громоздкой инфраструктуры.
Для создания нового компонента используется функция
Slim.tag. Она принимает имя тега и объект конфигурации:
Slim.tag('my-element', class extends Slim {
get template() {
return `
<div class="container">
<h2>{title}</h2>
<p>{description}</p>
</div>
`;
}
get title() {
return this._title || 'Заголовок';
}
set title(value) {
this._title = value;
this.update(); // обновление шаблона при изменении свойства
}
get description() {
return this._description || 'Описание компонента';
}
set description(value) {
this._description = value;
this.update();
}
});
Ключевые моменты:
template возвращает HTML-компонент с поддержкой
привязки данных.UPDATE() принудительно обновляет отображение при
изменении данных.Slim.js позволяет использовать привязку данных через фигурные скобки
{property} внутри шаблона. Изменения свойства автоматически
обновляют DOM без ручного вмешательства.
this.title = "Новый заголовок"; // автоматически обновляет <h2>
Привязка поддерживает не только простые свойства, но и массивы и объекты:
get items() {
return this._items || [];
}
se t items(value) {
this._items = value;
this.update();
}
В шаблоне массив можно отобразить с помощью блока
for:
<ul>
{#each items}
<li>{item}</li>
{/each}
</ul>
Slim.js упрощает обработку событий с помощью метода on.
Обработчики можно указывать прямо в шаблоне:
get template() {
return `
<button click="handleClick">Нажми меня</button>
`;
}
handleClick(event) {
console.log('Кнопка нажата', event);
}
Также можно использовать стандартные DOM-события через
addEventListener, но декларативный метод сокращает код и
повышает читаемость.
Компоненты Slim.js создаются с Shadow DOM по умолчанию, что обеспечивает изоляцию стилей и структуры:
get template() {
return `
<style>
.container {
padding: 10px;
background: #f0f0f0;
}
h2 { color: #333; }
</style>
<div class="container">
<h2>{title}</h2>
<p>{description}</p>
</div>
`;
}
Использование Shadow DOM предотвращает конфликт CSS с остальной страницей.
onBeforeCreated, onCreated,
onBeforeUpdate, onUpdated для управления
поведением.<slot> для передачи контента
внутрь компонента.Пример слотов:
get template() {
return `
<div class="wrapper">
<slot name="header"></slot>
<slot></slot>
</div>
`;
}
Slim.js совместим с любым современным JavaScript-кодом и библиотеками. Компоненты могут использовать fetch-запросы, работу с localStorage, интеграцию с Canvas, WebSockets и другими API.
async loadData() {
const response = await fetch('/api/data');
this.items = await response.json();
}
Для больших проектов Slim.js предлагает:
import.import './components/my-element.js';
document.body.appendChild(document.createElement('my-element'));
Такой подход позволяет создавать масштабируемые приложения с множеством компонентов, при этом поддерживая легковесность и реактивность.
Slim.js сочетает простоту разработки с мощью стандарта Web Components, позволяя создавать современные, переиспользуемые и изолированные компоненты.