FAST Element — это современный фреймворк для создания Web Components с высоким уровнем реактивности и гибкой архитектурой. Одной из ключевых возможностей является система директив, которая позволяет управлять поведением и отображением элементов на уровне шаблонов. Композиция директив в FAST Element обеспечивает создание сложных, многоуровневых реактивных интерфейсов без дублирования кода и потери производительности.
Директива в FAST Element — это функция или объект, который управляет
привязкой данных к DOM, изменяет свойства или атрибуты элементов и может
вмешиваться в процесс рендеринга. В FAST Element существуют стандартные
директивы, такие как repeat, if,
when, а также возможность создавать
пользовательские директивы.
Пример базовой директивы:
import { html, repeat } from '@microsoft/fast-element';
const items = [1, 2, 3];
const template = html`
${repeat(() => items, item => html`- ${item}
`)}
`;
Здесь repeat управляет генерацией списка элементов
на основе массива items.
Композиция директив заключается в объединении нескольких директив в одном выражении шаблона или в последовательной обработке данных через цепочку директив. Она позволяет:
В FAST Element композиция директив реализуется через вложение или функциональные обёртки.
Один из способов композиции — вложение одной директивы в другую.
Например, комбинация if и repeat:
import { html, repeat, when } from '@microsoft/fast-element';
const users = [
{ name: 'Alice', active: true },
{ name: 'Bob', active: false },
{ name: 'Charlie', active: true }
];
const template = html`
${repeat(
() => users,
user => when(
() => user.active,
html`- ${user.name}
`
)
)}
`;
В этом примере:
repeat проходит по массиву users.when отображает только активных пользователей.Ключевой момент: порядок вложения директив имеет
значение. Сначала нужно фильтровать данные (when), затем
уже повторять их (repeat), или наоборот, в зависимости от
задачи.
Другой подход к композиции — создание пользовательских директив, которые объединяют несколько стандартных директив в одной. Это позволяет сократить шаблон и повысить читаемость.
Пример пользовательской директивы:
import { directive, html, when } from '@microsoft/fast-element';
export const showIfActive = directive((condition, content) =>
html`${when(() => condition, content)}`
);
Использование в шаблоне:
const template = html`
${repeat(() => users, user => showIfActive(user.active, html`- ${user.name}
`))}
`;
Преимущества такого подхода:
Директивы в FAST Element могут принимать выражения и функции, которые автоматически отслеживаются реактивной системой. При изменении значений, на которые они ссылаются, DOM обновляется без полной перерисовки компонента.
Пример:
const isVisible = true;
const template = html`
${when(() => isVisible, html`Элемент видим
`)}
`;
Если isVisible изменяется, блок
автоматически появляется или исчезает.
Для композиции директив важно использовать функции доступа к данным, чтобы реактивность распространялась на все уровни вложенности.
Директивы можно применять не только к стандартным элементам HTML, но и к кастомным FAST Element компонентам:
import { FASTElement, html } from '@microsoft/fast-element';
class UserCard extends FASTElement {
user;
}
const template = html`
${repeat(() => users, user => html`
`)}
`;
Директива repeat создаёт множество экземпляров
компонента, каждый со своей реактивной привязкой данных. Это позволяет
строить комплексные интерфейсы с высокой переиспользуемостью
компонентов и директив.
При композиции директив важно учитывать производительность:
when, repeat и других директив может замедлять
рендеринг.when,
repeat) и логики состояния компонентов.Такой подход обеспечивает масштабируемость интерфейса и легкость поддержки больших проектов на FAST Element.