Методы жизненного цикла веб-компонента

Источник: «Web Component lifecycle methods»
Вчера мы изучили различные способы инстанцирования веб-компонента. В статье был упомянут метод жизненного цикла connectedCallback(). Сегодня поговорим об остальных методах жизненного цикла веб-компонентов.

Методы жизненного цикла веб-компонента

Когда браузер разбирает и отображает ваш веб-компонент в DOM, есть несколько функций обратного вызова жизненного цикла, выполняющихся в разное время.

Можно включить функции, выполняющиеся при каждом из этих событий, в класс нашего веб-компонента.

Методы connectedCallback() и disconnectedCallback()

Метод connectedCallback() выполняется, когда элемент внедряется или загружается в DOM, и снова, когда он перемещается или добавляется в другое место.

Метод disconnectedCallback() выполняется всякий раз, когда элемент удаляется из DOM.

/**
* Метод выполняется, когда элемент подключается к DOM
*/

connectedCallback () {
console.log('connected 🎉', this);
}

/**
* Метод выполняется, когда элемент отсоединяется от DOM
*/

disconnectedCallback () {
console.log('disconnected 😢', this);
}

Если добавить веб-компонент в пользовательский интерфейс и больше ничего не предпринимать на странице, будет запущен метод constructor(), а затем connectedCallback().

Если переместить элемент с помощью метода Element.append(), будет запущена функция disconnectedCallback(), а затем функция connectedCallback().

Если его удалить с помощью метода Element.remove(), будет запущена только функция disconnectedCallback().

let count = document.querySelector('wc-count');

// Логи консоли...
// "disconnected 😢" <wc-count></wc-count>
// "connected 🎉" <wc-count></wc-count>
document.body.append(count);

// Логи консоли...
// "disconnected 😢" <wc-count></wc-count>
count.remove();

В этом примере данные выводятся в консоль. Можно включить панель Инспектор и перейти во вкладку консоль и увидеть результат выполнения скрипта там. Или перейти на сайт CodePen с этим примером.

See the Pen

В каких случаях используются эти методы

Как мы вчера узнали, метод connectedCallback() может быть полезен, когда компонент может быть инстанцирован несколькими разными способами.

Они также необходимы, если элементы изменяются за пределами вашего элемента во время загрузки веб-компонента.

/**
* Метод выполняется, когда элемент подключается к DOM
*/

connectedCallback () {
document.body.addEventListener('click', this);
}

/**
* Метод выполняется, когда элемент отсоединяется от DOM
*/

disconnectedCallback () {
document.body.removeEventListener('click', this);
}

Исторически, множество статей советуют запускать все задачи по настройке внутри метода connectedCallback() и удалять такие вещи, как слушатель событий, в методе disconnectedCallback().

Но в случае слушателей событий, находящихся внутри веб-компонента и его дочерних элементов, они всё равно собираются сборщиком мусора после удаления элемента, так что в этом нет необходимости.

Что насчёт атрибутов

Позже мы рассмотрим метод attributeChangedCallback(): что это такое, как он работает и как его использовать.

Все статьи серии о Веб-Компонентах/Web Component

Дополнительные материалы

Предыдущая Статья

Различные способы инстанцирования веб-компонента

Следующая Статья

Как обнаружить изменение атрибутов веб-компонента