В FAST Element концепция поведений (behaviors) играет ключевую роль в расширении функциональности веб-компонентов без необходимости вмешательства в их внутреннюю структуру. Поведение представляет собой абстракцию, которая позволяет связывать элементы с повторно используемой логикой, создавая модульные, легко поддерживаемые компоненты.
Поведение — это объект или функция, которая внедряет определённую функциональность в компонент. В FAST Element поведения используются для:
В отличие от миксинов, поведения сохраняют чистоту наследования, не изменяя прототип напрямую, а предоставляя декларативный способ композиции функциональности.
Поведение обычно описывается как объект с одним или несколькими из следующих методов:
connectedCallback() — вызывается при присоединении
компонента к DOM.disconnectedCallback() — вызывается при удалении
компонента из DOM.attributeChangedCallback(name, oldValue, newValue) —
реагирует на изменения атрибутов.adoptedCallback() — вызывается при перемещении элемента
между документами.Пример простого поведения, добавляющего логирование при подключении компонента:
import { FASTElement } from "@microsoft/fast-element";
export const LoggingBehavior = {
connectedCallback() {
console.log(`${this.localName} был подключен к DOM`);
}
};
class MyElement extends FASTElement {}
FASTElement.define({ name: "my-element", element: MyElement, behaviors: [LoggingBehavior] });
FAST Element поддерживает множественное подключение поведений. Они объединяются в массив, передаваемый при определении элемента. Порядок имеет значение: методы будут вызываться в том порядке, в котором поведения перечислены.
const FocusBehavior = {
connectedCallback() {
this.tabIndex = 0;
}
};
FASTElement.define({
name: "interactive-element",
element: MyElement,
behaviors: [LoggingBehavior, FocusBehavior]
});
В этом примере сначала выполнится
LoggingBehavior.connectedCallback, затем
FocusBehavior.connectedCallback.
Поведения могут управлять реактивными свойствами компонента,
используя встроенные возможности FAST Element, такие как
@observable и @attr. Это позволяет создавать
повторно используемые логические блоки, которые автоматически
синхронизируются с состоянием компонента.
import { observable } from "@microsoft/fast-element";
export const CounterBehavior = {
@observable count = 0,
increment() {
this.count++;
},
connectedCallback() {
this.increment();
}
};
Использование таких поведений делает компоненты более предсказуемыми и облегчает тестирование, поскольку логику можно изолировать от конкретного элемента.
Поведения часто применяются для:
В отличие от классического наследования или миксинов:
connectedCallback и
disconnectedCallback должны быть idempotent, чтобы
повторное подключение компонента не приводило к некорректным
состояниям.Поведения в FAST Element позволяют строить высокомодульные, повторно используемые компоненты, отделяя логику от структуры. Они обеспечивают чистый, декларативный подход к расширению функциональности элементов и являются ключевым инструментом при разработке сложных интерфейсов.