Slim.js — это легковесная библиотека для создания веб-компонентов с реактивным обновлением DOM. Компоненты в Slim.js позволяют инкапсулировать логику и шаблон, что делает код более структурированным и удобным для поддержки. Каждый компонент представляет собой отдельный класс, связанный с HTML-шаблоном и поведением.
class MyComponent extends Slim {
constructor() {
super();
this.message = "Привет, Slim.js!";
}
get template() {
return `<p>{this.message}</p>`;
}
}
Slim.tag('my-component', MyComponent);
В этом примере создается компонент my-component, который
отображает текст, хранящийся в свойстве message.
1. Наследование от Slim Каждый компонент создается
путем наследования от базового класса Slim. Это
обеспечивает доступ к реактивным свойствам, методам жизненного цикла и
возможности автоматически обновлять DOM при изменении данных.
2. Конструктор В конструкторе обычно инициализируются начальные значения свойств компонента. Все свойства, определенные здесь, становятся реактивными, если они используются в шаблоне.
3. Шаблон (template) Шаблон — это
геттер, который возвращает HTML-код с привязкой к свойствам компонента.
Синтаксис {this.propertyName} позволяет автоматически
обновлять DOM при изменении значения свойства.
Любое свойство, использованное в шаблоне через
{this.property}, автоматически становится
реактивным. При изменении его значения DOM обновляется
без необходимости ручного вызова рендеринга.
class CounterComponent extends Slim {
constructor() {
super();
this.count = 0;
}
increment() {
this.count += 1;
}
get template() {
return `
<div>
<p>Счётчик: {this.count}</p>
<button oncl ick="{this.increment}">Увеличить</button>
</div>
`;
}
}
Slim.tag('counter-component', CounterComponent);
Метод increment изменяет значение count, и
элемент <p> автоматически обновляется благодаря
реактивной привязке.
Slim.js предоставляет несколько методов жизненного цикла:
onBeforeCreated() — вызывается перед инициализацией
компонента.onCreated() — вызывается сразу после создания
элемента.onBeforeUpdate() — вызывается перед обновлением
DOM.onUpdated() — вызывается после обновления DOM.onBeforeDestroyed() — вызывается перед удалением
компонента.onDestroyed() — вызывается после удаления
компонента.Пример использования:
class LifecycleComponent extends Slim {
constructor() {
super();
this.status = "Создан";
}
onCreated() {
console.log("Компонент создан");
}
onUpdated() {
console.log("Компонент обновлен, статус:", this.status);
}
get template() {
return `<p>{this.status}</p>`;
}
}
Slim.tag('lifecycle-component', LifecycleComponent);
Slim.js позволяет привязывать события напрямую к методам компонента
через атрибуты HTML, используя синтаксис
{this.methodName}.
class ClickComponent extends Slim {
constructor() {
super();
this.clicked = false;
}
handleClick() {
this.clicked = !this.clicked;
}
get template() {
return `
<button oncl ick="{this.handleClick}">
{this.clicked ? 'Нажато' : 'Не нажато'}
</button>
`;
}
}
Slim.tag('click-component', ClickComponent);
Состояние кнопки изменяется при каждом клике благодаря реактивной привязке.
Slim.js поддерживает использование одного компонента внутри другого. Вложенные компоненты автоматически инициализируются при рендеринге родителя.
class ParentComponent extends Slim {
get template() {
return `
<div>
<h2>Родительский компонент</h2>
<child-component></child-component>
</div>
`;
}
}
class ChildComponent extends Slim {
get template() {
return `<p>Дочерний компонент</p>`;
}
}
Slim.tag('parent-component', ParentComponent);
Slim.tag('child-component', ChildComponent);
В этом примере ParentComponent содержит
ChildComponent. Slim.js автоматически создает экземпляр
дочернего компонента и вставляет его в DOM.
Компоненты можно стилизовать через стандартные CSS или встроенные
<style> внутри шаблона:
class StyledComponent extends Slim {
get template() {
return `
<style>
p { color: blue; font-weight: bold; }
</style>
<p>Стилизованный текст</p>
`;
}
}
Slim.tag('styled-component', StyledComponent);
Использование встроенных стилей позволяет инкапсулировать CSS, что предотвращает конфликт с глобальными стилями страницы.
Первый компонент в Slim.js строится вокруг:
SlimtemplateЭто обеспечивает мощный, при этом компактный, инструмент для построения веб-интерфейсов с четкой архитектурой и минимальным объемом кода.