FAST Element — это библиотека для создания веб-компонентов на основе стандартов Custom Elements с акцентом на производительность, реактивность и удобство работы с шаблонами. В отличие от обычных подходов к веб-компонентам, FAST Element предоставляет декларативный синтаксис для связывания данных с шаблонами и мощный механизм реактивных свойств.
Ключевые моменты:
FASTElement.define.html тэг-функция
для декларативного описания структуры DOM.import { FASTElement, html, css } from "@microsoft/fast-element";
const template = html`
${x => x.message}
`;
const styles = css`
div { color: blue; }
`;
class MyElement extends FASTElement {
message = "Привет, FAST!";
}
MyElement.define({ name: "my-element", template, styles });
FAST Element поддерживает несколько типов привязок данных:
x => x.prop) — данные текут от свойства элемента в
шаблон.:prop) —
синхронизация данных между DOM и свойствами элемента.@event) —
обработка событий напрямую в шаблоне.const template = html`
x.name = c.event.target.value}">
Привет, ${x => x.name}
`;
Каждое изменение свойства name автоматически обновляет
текст в параграфе, обеспечивая реактивное поведение без необходимости
ручного манипулирования DOM.
FAST Element интегрирует CSS напрямую в компоненты через объект
css. Стили являются изолированными для компонента и
поддерживают переменные CSS:
const styles = css`
:host {
display: block;
font-family: sans-serif;
--main-color: red;
}
div {
color: var(--main-color);
}
`;
:host определяет стили для самого элемента.Изоморфный подход предполагает использование одного и того же кода на клиенте и сервере. FAST Element поддерживает серверный рендеринг (SSR) через генерацию статических HTML-шаблонов с последующей гидратацией на клиенте.
Основные принципы изоморфного рендеринга в FAST:
import { FASTElement, html } from "@microsoft/fast-element";
import { renderToString } from "@microsoft/fast-server-renderer";
const template = html`${x => x.message}`;
class MyElement extends FASTElement {
message = "Изоморфный FAST!";
}
// Серверный рендеринг
const htmlString = renderToString(template, new MyElement());
На клиенте FAST автоматически связывает реактивные свойства с DOM без повторного построения элементов.
FAST Element поддерживает слоты для гибкой композиции компонентов:
const template = html`
`;
class LayoutElement extends FASTElement {}
LayoutElement.define({ name: "layout-element", template });
— для контента
по умолчанию. — для определённой
части структуры.Композиция элементов позволяет строить сложные интерфейсы с изолированными компонентами, сохраняя изоморфность.
FAST Element предлагает встроенные директивы для управления DOM:
if — условный рендеринг.repeat — повторение элементов по
массиву.ref — доступ к узлам DOM
напрямую.import { repeat, when } from "@microsoft/fast-element";
const template = html`
${when(x => x.isVisible, html`Видимый контент
`)}
${repeat(x => x.items, html- `
${i => i} `)}
`;
when создаёт блоки, которые добавляются или убираются
из DOM.repeat генерирует списки элементов с оптимизированной
отрисовкой и минимальными изменениями DOM.FAST Element спроектирован с учётом производительности:
Это делает FAST Element подходящим для крупных приложений с динамическим контентом и изоморфной архитектурой.