Открыть сервис

Lightning Web Components

Lightning Web Components (LWC) — это фреймворк для создания пользовательских интерфейсов на платформе Salesforce, основанный на стандартных веб-технологиях (HTML, CSS и JavaScript) и использующий модель веб-компонентов (Custom Elements, Shadow DOM, HTML Templates). LWC был представлен Salesforce в 2018 году как современная замена устаревшей модели компонентов Aura, предлагая более высокую производительность, меньший размер кода и соответствие современным веб-стандартам.

История

До появления LWC разработка пользовательского интерфейса в экосистеме Salesforce велась с помощью фреймворка Aura (Lightning Components), который был запущен в 2013 году. Aura использовал проприетарный синтаксис и собственную систему рендеринга, что приводило к сложностям в разработке, низкой производительности и трудностям с интеграцией сторонних библиотек.

В 2018 году на конференции Dreamforce компания Salesforce анонсировала Lightning Web Components. Основной целью было создание фреймворка, который бы опирался на нативные возможности браузера, а не на абстракции, тем самым упрощая разработку и повышая скорость работы приложений. LWC был построен на основе стандарта веб-компонентов (Custom Elements v1, Shadow DOM v1, HTML Templates), что позволило разработчикам использовать знакомые инструменты и подходы. Первая версия LWC была выпущена в составе Spring ’19 релиза Salesforce.

Архитектура и принципы работы

Модель веб-компонентов

LWC базируется на трёх ключевых технологиях веб-компонентов:

  1. Custom Elements — каждый компонент LWC является пользовательским HTML-элементом, который можно использовать в разметке (например, <my-component>).
  2. Shadow DOM — обеспечивает инкапсуляцию стилей и DOM-дерева компонента, предотвращая конфликты с внешними стилями и скриптами.
  3. HTML Templates — шаблоны компонентов определяются с помощью тега <template>, который не рендерится до момента активации компонента.

Структура компонента

Каждый компонент LWC состоит из трёх основных файлов (в единой папке):

  • HTML-шаблон (.html) — определяет разметку компонента, используя синтаксис, близкий к стандартному HTML, с добавлением директив для привязки данных и условного рендеринга.
  • JavaScript-класс (.js) — содержит логику компонента: обработчики событий, вычисляемые свойства, методы жизненного цикла. Класс наследуется от LightningElement.
  • CSS-стили (.css) — стили, применяемые к компоненту. Благодаря Shadow DOM, они изолированы от остальной части страницы.

Опционально могут присутствовать файлы конфигурации (.js-meta.xml) и тестов (.test.js).

Реактивность

LWC использует реактивную модель данных на основе геттеров и сеттеров. Когда значение свойства, объявленного с помощью декоратора @track или @api, изменяется, фреймворк автоматически перерисовывает только те части шаблона, которые зависят от этого свойства. Это обеспечивает высокую производительность без необходимости ручного управления обновлениями DOM.

Жизненный цикл компонента

Компонент проходит через несколько предопределённых фаз (хуков жизненного цикла):

  • constructor() — вызывается при создании экземпляра компонента.
  • connectedCallback() — вызывается, когда компонент вставляется в DOM.
  • renderedCallback() — вызывается после каждого рендеринга компонента.
  • disconnectedCallback() — вызывается, когда компонент удаляется из DOM.
  • errorCallback(error, stack) — вызывается при возникновении ошибки в дочернем компоненте.

Ключевые возможности и синтаксис

Директивы шаблонов

Для управления отображением и поведением элементов в шаблоне используются директивы:

  • if:true / if:false — условный рендеринг.
  • for:each — итерация по массиву.
  • on{event} — привязка обработчиков событий (например, onclick, onchange).
  • lwc:dom — для интеграции с внешними библиотеками, работающими с DOM.
  • lwc:if / lwc:else / lwc:elseif — более производительная альтернатива условного рендеринга (доступна с версии 246).

Привязка данных

Данные из JavaScript-класса передаются в шаблон через фигурные скобки ({property}). Для двусторонней привязки (например, для полей ввода) используется директива onchange и событие change.

События

Компоненты LWC могут генерировать и обрабатывать события. Для создания пользовательского события используется метод dispatchEvent(new CustomEvent(...)). Для передачи данных от дочернего компонента к родительскому используются стандартные события DOM.

Композиция

Компоненты могут быть вложены друг в друга. Для передачи данных от родительского компонента к дочернему используются публичные свойства, объявленные с декоратором @api. Для передачи данных от дочернего к родительскому — события.

Сравнение с Aura

ХарактеристикаLightning Web Components (LWC)Aura
ОсноваСтандартные веб-компоненты (Custom Elements, Shadow DOM)Проприетарный фреймворк с собственной системой рендеринга
ПроизводительностьВыше (меньше накладных расходов на рендеринг)Ниже (из-за сложной системы реактивности и кэширования)
Размер кодаМеньше (используется нативный JavaScript)Больше (требуется Aura-специфичный синтаксис)
СовместимостьВысокая (легко интегрируется с любыми JavaScript-библиотеками)Низкая (требуется специальная обёртка для сторонних библиотек)
ОбучениеПроще (используются стандартные веб-технологии)Сложнее (требуется изучение проприетарного API)
ПоддержкаАктивно развивается (основной фреймворк для новых проектов)Поддерживается, но не рекомендуется для новых проектов

Применение

LWC используется для разработки:

  • Пользовательских интерфейсов в Salesforce — страницы приложений, компоненты для Lightning App Builder, табы, записи.
  • Компонентов для Experience Cloud — порталы и сайты на базе Salesforce.
  • Мобильных приложений — компоненты для Salesforce Mobile SDK.
  • Интеграций с внешними системами — через вызов Apex-методов или REST API.

Инструменты разработки

Для разработки LWC используются:

  • Salesforce CLIинтерфейс командной строки для создания, развёртывания и тестирования компонентов.
  • Visual Studio Code с расширениями Salesforce Extension Pack — среда разработки с подсветкой синтаксиса, автодополнением и отладкой.
  • Salesforce DX — набор инструментов для управления жизненным циклом приложений (CI/CD, скретч-организации).
  • Lightning Web Components Dev Toolsрасширение для браузера Chrome, позволяющее инспектировать и отлаживать компоненты.

Ограничения и критика

Несмотря на преимущества, LWC имеет ряд ограничений:

  • Зависимость от платформы Salesforce — компоненты не могут быть использованы вне экосистемы Salesforce без дополнительных адаптеров.
  • Ограниченная поддержка старых браузеров — для работы требуется современный браузер, поддерживающий Shadow DOM и Custom Elements (не поддерживается в Internet Explorer 11).
  • Сложность отладки — из-за инкапсуляции Shadow DOM отладка стилей и DOM может быть затруднена.
  • Отсутствие полной поддержки стандарта — некоторые функции веб-компонентов (например, слоты с именем) реализованы не полностью или имеют особенности.

Будущее

LWC является основным фреймворком для разработки пользовательских интерфейсов в Salesforce. Компания активно инвестирует в его развитие, добавляя новые возможности (например, поддержку TypeScript, улучшенную производительность, интеграцию с другими облачными сервисами). Ожидается, что в ближайшие годы LWC полностью вытеснит Aura из новых проектов.

Источники

  • Официальная документация Salesforce по Lightning Web Components.
  • Документация стандарта Web Components (W3C).
  • Материалы конференции Dreamforce 2018.
  • Статьи и блоги разработчиков Salesforce (Trailhead, Salesforce Developers Blog).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →