FAST Element — это современная библиотека для создания веб-компонентов на основе стандартов Web Components с декларативным синтаксисом и мощной системой реактивности. Она обеспечивает легковесность, высокую производительность и простую интеграцию с существующими проектами на JavaScript и TypeScript. В основе лежат custom elements, shadow DOM и reactive properties, что позволяет создавать полностью изолированные и переиспользуемые компоненты.
Для объявления компонента используется функция
FASTElement.define. Компонент создается на базе класса,
наследующего FASTElement, и может содержать реактивные
свойства и методы.
import { FASTElement, html, css, customElement, observable } from "@microsoft/fast-element";
const template = html<MyElement>`
<div>
<h1>${x => x.title}</h1>
<button @click=${x => x.increment()}>Нажми меня</button>
<p>Счетчик: ${x => x.count}</p>
</div>
`;
const styles = css`
div {
border: 1px solid #ccc;
padding: 10px;
border-radius: 5px;
}
h1 {
font-size: 1.5em;
}
`;
@customElement({ name: 'my-element', template, styles })
class MyElement extends FASTElement {
@observable count = 0;
title = "Пример FAST Element";
increment() {
this.count++;
}
}
Ключевые моменты:
@observable создаёт реактивное свойство, изменение
которого автоматически обновляет DOM.@click) связываются с методами компонента
напрямую.template и styles обеспечивают изоляцию
внешнего вида и структуры.Шаблоны FAST Element используют выражения JavaScript для привязки данных. Поддерживаются:
${x => x.property}<input value="${x => x.text}" @input="${x => x.text = x.event.target.value}">Также поддерживаются условные и циклические конструкции:
const template = html<MyElement>`
<ul>
${x => x.items.map(item => html`<li>${item}</li>`)}
</ul>
${x => x.items.length === 0 ? html`<p>Список пуст</p>` : null}
`;
FAST Element позволяет использовать изолированные стили через Shadow
DOM. Можно применять обычный CSS, а также специальные директивы FAST,
такие как :host для корневого элемента компонента.
:host {
display: block;
background-color: #f9f9f9;
}
button {
cursor: pointer;
padding: 5px 10px;
}
Обработка событий выполняется через атрибуты шаблона с синтаксисом
@event, что позволяет напрямую связывать методы компонента
с DOM-событиями:
<button @click=${x => x.handleClick()}>Нажать</button>
Для глобальных событий можно использовать стандартные методы
addEventListener в методе
connectedCallback.
FAST Element поддерживает слоты для создания составных компонентов. Слоты позволяют внедрять контент внутрь компонента с сохранением структуры Shadow DOM.
const template = html`
<div class="card">
<slot name="header"></slot>
<slot></slot>
<slot name="footer"></slot>
</div>
`;
Использование компонента с слотами:
<my-card>
<h1 slot="header">Заголовок</h1>
<p>Основной контент</p>
<footer slot="footer">Подвал</footer>
</my-card>
FAST предоставляет набор встроенных директив для управления рендерингом и динамическим поведением:
repeat — для генерации элементов на основе
массива.when — условное отображение элементов.ref — получение ссылки на DOM-элемент для работы в
коде.attr — динамическая привязка атрибутов HTML.Пример использования repeat:
<ul>
${repeat(x => x.items, html`<li>${item => item}</li>`)}
</ul>
FAST Element полностью интегрирован с Shadow DOM, что обеспечивает изоляцию стилей и предотвращает конфликт с внешним CSS. Компоненты могут использовать:
:host — стили для корневого элемента.:host([attr]) — стили при наличии атрибута.::slotted() — стили для контента в слотах.Компоненты FAST можно расширять через обычное наследование и миксины. Это позволяет создавать библиотеки переиспользуемых базовых компонентов с общим поведением.
class BaseElement extends FASTElement {
log(message) {
console.log(`[BaseElement] ${message}`);
}
}
class CustomElement extends BaseElement {
doSomething() {
this.log("Действие выполнено");
}
}
FAST Element совместим с любыми фреймворками и сборщиками. Компоненты можно использовать в проектах с React, Vue, Angular, либо напрямую в HTML. Они полностью поддерживают модульную структуру ES6 и TypeScript.
Благодаря реактивной системе и минимальному числу обновлений DOM FAST Element обеспечивает высокую производительность даже при больших структурах. Обновления применяются только к изменившимся частям шаблона, что снижает нагрузку на рендеринг.
FAST Element имеет встроенную поддержку TypeScript, что позволяет задавать типы свойств и методов, повышая безопасность кода. Пример:
@observable count: number = 0;
title: string = "Заголовок";
Это обеспечивает автодополнение, проверку типов и предотвращает ошибки на этапе компиляции.
FAST Element предоставляет полный инструментарий для создания современных веб-компонентов с реактивными данными, стилями и событийной системой. Его преимущества — простота, скорость и гибкость в построении как небольших, так и масштабных интерфейсов.