Условный рендеринг в FAST Element позволяет динамически изменять отображение элементов на основе состояния компонента. Эта функциональность реализуется через специальные директивы и реактивные свойства, что делает компоненты гибкими и высокоэффективными.
ifДиректива if является основным инструментом для
условного отображения элементов. Она принимает логическое выражение и
рендерит содержимое только при истинности этого выражения.
import { FASTElement, html, css } from "@microsoft/fast-element";
class MyComponent extends FASTElement {
isVisible = true;
}
MyComponent.define({
name: "my-component",
template: html<MyComponent>`
<div>
${x => x.isVisible ? html`<p>Этот текст отображается условно</p>` : null}
</div>
`
});
Особенности использования if:
isVisible FAST автоматически
обновляет DOM.repeat для условного спискаИногда условие применяется не к отдельному элементу, а к набору
данных. В таких случаях удобно комбинировать if с
repeat.
import { repeat } from "@microsoft/fast-element";
const template = html<MyComponent>`
<ul>
${repeat(
x => x.items.filter(item => item.visible),
html`<li>${x => x.name}</li>`
)}
</ul>
`;
Примечания:
repeat автоматически отслеживает изменения массива и
обновляет DOM.repeat позволяет
динамически скрывать элементы.Любое свойство, помеченное как реактивное, может быть использовано
для управления отображением. Для этого используется декоратор
@observable.
import { FASTElement, observable, html } from "@microsoft/fast-element";
class ToggleComponent extends FASTElement {
@observable showContent = false;
toggle() {
this.showContent = !this.showContent;
}
}
ToggleComponent.define({
name: "toggle-component",
template: html<ToggleComponent>`
<button @click=${x => x.toggle()}>Переключить</button>
${x => x.showContent ? html`<p>Контент отображается</p>` : null}
`
});
showContent FAST автоматически перерисует
только те части DOM, которые зависят от этого свойства.html-шаблоныДля сложных условий удобно определять отдельные фрагменты шаблона и включать их через выражения.
const loadingTemplate = html<MyComponent>`<p>Загрузка...</p>`;
const loadedTemplate = html<MyComponent>`<p>Данные загружены</p>`;
const template = html<MyComponent>`
${x => x.isLoading ? loadingTemplate : loadedTemplate}
`;
Преимущества:
FAST поддерживает вложенные тернарные выражения и директивы
if, что позволяет строить сложную логику отображения.
${x => x.status === 'loading' ? html`<p>Загрузка...</p>`
: x.status === 'error' ? html`<p>Ошибка!</p>`
: html`<p>Данные загружены</p>`}
html, чтобы избежать громоздких тернарных выражений.if и repeat для условного
отображения списков с динамическими данными.Условный рендеринг в FAST Element обеспечивает высокую производительность за счёт минимальных операций с DOM и автоматического отслеживания реактивных свойств, делая компоненты динамичными и масштабируемыми.