Web Components & Shadow DOM
Веб-компоненты — совокупность стандартов, которая позволяет создавать новые, пользовательские HTML-элементы со своими свойствами, методами, инкапсулированными DOM и стилями.
Существует два вида пользовательских элементов (Custom Elements):
Автономные пользовательские элементы – «полностью новые» элементы, расширяющие абстрактный класс
HTMLElement.Пользовательские встроенные элементы – элементы, расширяющие встроенные, например кнопку
HTMLButtonElementи т.п.

В модульном теге script, мы определили новый класс который c помощью метода customElements.define() определили за тегом my-webcomp.
А добавив код в метод connectedCallback() мы обеспечили его вызов при добавлении реализации компонента в дерево.
Cуществует ряд дополнительных методов, связанных с жизненным циклом элемента. Обращение к ним происходит в различные моменты:
connectedCallbackвызывается при добавлении элемента в документ (в общем случае несколько раз, так как элемент может быть перемещён или удалён и заново добавлен);disconnectedCallback— в противоположностьconnectedCallback;attributeChangeCallbackсрабатывает при модификации атрибутов из специального списка.
Пример:

Долгое время использование id считалось дурным тоном, потому что на значительных объемах кода они могли дублироваться, что приводило к коллизиям. Однако, с появлением технологии теневого дерева можно внутреннее содержимое элемента изолировать использовать id, стили и прочие ресурсы без опасений. Для веб-компонентов включается теневое дерево следующим образом:

Визуально работа этого кода опять никак не изменится, но теперь в глобальном пространстве имен не будет никакого helloLabel, а у на странице уже 2 элемента с таким идентификатором. А получить доступ к ним можно будет например вот так:

Теперь правда все DOM обращения к this придется заменить на this.shadowRoot благо их пока не так много.

Useful links:
Last updated
Was this helpful?