Жизненный цикл компонента в FAST Element описывает последовательность этапов, через которые проходит элемент от момента его создания до удаления из DOM. Понимание этих этапов критично для управления состоянием компонента, оптимизации рендеринга и корректной работы реактивных свойств.
Когда элемент создается с помощью customElements.define
и появляется в DOM, вызывается конструктор класса, унаследованного от
FASTElement. В конструкторе выполняются базовые
действия:
@observable).FASTElement.define.Пример:
import { FASTElement, html, css, observable } from "@microsoft/fast-element";
const template = html<MyElement>`
<div>${x => x.message}</div>
`;
const styles = css`
div {
color: blue;
}
`;
class MyElement extends FASTElement {
@observable message = "Привет, FAST!";
}
MyElement.define({ name: "my-element", template, styles });
На этапе создания шаблон еще не вставлен в DOM, поэтому любые операции с реальными узлами необходимо откладывать до следующего этапа жизненного цикла.
connectedCallback)Метод connectedCallback вызывается автоматически, когда
элемент добавляется в DOM. FAST Element расширяет стандартное поведение,
обеспечивая:
Пример использования:
class MyElement extends FASTElement {
connectedCallback() {
super.connectedCallback();
console.log("Элемент добавлен в DOM");
}
}
Важно вызывать super.connectedCallback(), чтобы FAST
Element смог корректно обработать привязку и вставку шаблона.
FAST Element использует реактивную систему на основе декоратора
@observable. При изменении свойства автоматически
обновляется DOM:
class MyElement extends FASTElement {
@observable message = "Привет";
messageChanged(oldValue, newValue) {
console.log(`Свойство message изменилось с "${oldValue}" на "${newValue}"`);
}
}
Метод messageChanged вызывается каждый раз при изменении
свойства message. Такой подход позволяет создавать
компоненты с автоматическим обновлением без ручного вмешательства в
DOM.
FAST Element использует эффективный механизм диффинга для обновления только изменившихся частей шаблона. Это минимизирует операции с DOM и ускоряет рендеринг.
x => x.property) обновляет только текстовые узлы.bind
позволяет синхронизировать свойства элемента с внешними источниками
данных.Пример:
const template = html<MyElement>`
<input value="${x => x.message}" @input="${x => x.handleInput()}"/>
`;
class MyElement extends FASTElement {
@observable message = "";
handleInput(event) {
this.message = event.target.value;
}
}
disconnectedCallback)Метод disconnectedCallback вызывается, когда элемент
удаляется из DOM. На этом этапе рекомендуется:
Пример:
class MyElement extends FASTElement {
disconnectedCallback() {
super.disconnectedCallback();
console.log("Элемент удален из DOM");
}
}
FAST Element синхронизирует атрибуты HTML с реактивными свойствами. Атрибуты конвертируются в соответствующие типы и обновляют реактивные свойства:
class MyElement extends FASTElement {
@observable count = 0;
}
const elem = document.createElement("my-element");
elem.setAttribute("count", "5"); // Автоматически обновляет this.count
Если требуется кастомная логика конверсии, можно переопределить
attributeChangedCallback.
Каждое изменение реактивного свойства инициирует:
propertyChanged соответствующих
свойств.FASTElement.observe или подписку на события).Это позволяет создавать высокопроизводительные и масштабируемые компоненты без лишних операций с DOM.
FAST Element поддерживает события для отслеживания жизненного цикла:
connected — элемент вставлен в DOM.disconnected — элемент удален из DOM.propertyChanged — изменилось наблюдаемое свойство.Эти события полезны для интеграции с внешними библиотеками и управлением сложными состояниями.
@observable для всех свойств, влияющих на
рендеринг.connectedCallback.disconnectedCallback.propertyChanged для реактивной
логики.Жизненный цикл FAST Element обеспечивает предсказуемую и оптимизированную работу компонентов, позволяя управлять состоянием, рендерингом и взаимодействием с DOM без лишней сложности. Понимание каждого этапа позволяет создавать мощные веб-компоненты с высокой производительностью и масштабируемостью.