FAST Element — это библиотека для создания
веб-компонентов на JavaScript, разработанная с акцентом на
производительность и масштабируемость. В отличие от стандартного подхода
с Custom Elements и Shadow DOM, FAST
предоставляет высокоуровневую абстракцию, упрощающую работу с шаблонами,
реактивными свойствами и состоянием компонентов.
Базовым строительным блоком является класс FASTElement,
от которого наследуются все компоненты. Он реализует управление
состоянием через реактивные свойства, позволяя автоматически отслеживать
изменения и обновлять DOM без ручного вмешательства.
import { FASTElement, html, css, customElement } from "@microsoft/fast-element";
const template = html<MyElement>`
<h1>${x => x.title}</h1>
<p>${x => x.content}</p>
`;
const styles = css`
h1 { color: #0078d4; }
p { font-size: 16px; }
`;
@customElement({ name: "my-element", template, styles })
class MyElement extends FASTElement {
title = "Привет FAST";
content = "Это пример компонента на FAST Element.";
}
Шаблон в FAST Element создается с помощью функции html.
Внутри шаблона можно использовать реактивные выражения
${x => x.property}, которые автоматически связываются с
соответствующими свойствами компонента. Любое изменение свойства
автоматически обновляет DOM в местах использования этого свойства.
repeat, if, when.import { repeat } from "@microsoft/fast-element";
const listTemplate = html<MyListElement>`
<ul>
${repeat(x => x.items, html<ItemElement>`<li>${i => i.name}</li>`)}
</ul>
`;
FAST Element поддерживает инкапсулированные стили с помощью
css. Все стили, переданные в компонент, применяются
локально, предотвращая утечки в глобальный DOM. Поддерживаются:
--primary-color) для темизации.const dynamicStyles = css<MyElement>`
:host([primary]) h1 { color: var(--primary-color, blue); }
`;
FAST Element предоставляет набор встроенных директив, упрощающих сложное управление DOM:
repeat — повторение элементов
массива.when — условное отображение.ref — ссылка на DOM-элемент.delegate — делегирование событий.import { when } from "@microsoft/fast-element";
const conditionalTemplate = html<MyElement>`
${when(x => x.isVisible, html<MyElement>`<p>Элемент виден</p>`)}
`;
FAST Element расширяет стандартные методы жизненного цикла Web Components:
connectedCallback — вызывается при
добавлении компонента в DOM.disconnectedCallback — при удалении
компонента.propertyChanged — срабатывает при
изменении реактивного свойства.adoptedCallback — при переносе в
другой документ (редко используется).class MyElement extends FASTElement {
propertyChanged(name, oldValue, newValue) {
console.log(`Свойство ${name} изменилось с ${oldValue} на ${newValue}`);
}
}
События в FAST Element можно создавать с помощью метода
emitEvent. Для привязки событий в шаблоне используется
директива @eventName.
const template = html<MyElement>`
<button @click=${x => x.handleClick()}>Нажми меня</button>
`;
class MyElement extends FASTElement {
handleClick() {
this.$emit("custom-event", { detail: "Данные события" });
}
}
FAST Element облегчает повторное использование компонентов через вложенные элементы. Компоненты можно импортировать и использовать как обычные HTML-теги, сохраняя реактивность и локальные стили.
<my-card>
<my-card-header title="Заголовок" />
<my-card-content>
Контент карточки
</my-card-content>
</my-card>
FAST Element легко интегрируется с фреймворками и библиотеками:
FAST Element оптимизирован для быстрого рендеринга:
repeat с функцией
ключа.Эта библиотека позволяет создавать высокопроизводительные веб-приложения с модульной архитектурой, сохраняя при этом чистоту кода и масштабируемость компонентов.