ReactiveElement
class ReactiveElementИсточник
Базовый класс элемента, который управляет свойствами и атрибутами элемента. При изменении свойств асинхронно вызывается метод update. Этот метод следует реализовать в подклассах, чтобы выполнять обновление нужным образом.
Импорт
import { ReactiveElement } from 'lit';
Атрибуты
attributeChangedCallback(name, _old, value): voidИсточник
Синхронизирует значения свойств при изменении атрибутов.
Параметры
- name
string- _old
null | string- value
null | string
Подробности
В частности, при установке атрибута устанавливается соответствующее свойство. Обычно нет необходимости реализовывать этот обратный вызов. Если этот метод переопределяется, необходимо вызвать super.attributeChangedCallback(name, _old, value). Дополнительные сведения о attributeChangedCallback см. в разделе MDN использование обратных вызовов жизненного цикла.
static observedAttributes: Array<string>Источник
Возвращает список атрибутов, соответствующих зарегистрированным свойствам.
Контроллеры
addController(controller): voidИсточник
Регистрирует ReactiveController для участия в цикле реактивного обновления элемента. Элемент автоматически вызывает все зарегистрированные контроллеры в обратных вызовах жизненного цикла.
Параметры
- controller
ReactiveController
Подробности
Если элемент подключен в момент вызова addController(), обратный вызов hostConnected() контроллера будет вызван немедленно.
removeController(controller): voidИсточник
Режим разработки
static disableWarning?: (warningKind: WarningKind) => voidИсточник
Отключает указанную категорию предупреждений для этого класса.
Подробности
Этот метод существует только в сборках для разработки, поэтому обращаться к нему следует с проверкой, например:
// Disable for all ReactiveElement subclasses
ReactiveElement.disableWarning?.('migration');
// Disable for only MyElement and subclasses
MyElement.disableWarning?.('migration');
static enabledWarnings?: Array<WarningKind>Источник
Читает или задает все включенные категории предупреждений для этого класса.
Подробности
Это свойство используется только в сборках для разработки.
static enableWarning?: (warningKind: WarningKind) => voidИсточник
Включает указанную категорию предупреждений для этого класса.
Подробности
Этот метод существует только в сборках для разработки, поэтому обращаться к нему следует с проверкой, например:
// Enable for all ReactiveElement subclasses
ReactiveElement.enableWarning?.('migration');
// Enable for only MyElement and subclasses
MyElement.enableWarning?.('migration');
Жизненный цикл
connectedCallback(): voidИсточник
При первом подключении создает renderRoot элемента, настраивает стили элемента и включает обновление.
disconnectedCallback(): voidИсточник
Предоставляет возможность super.disconnectedCallback() в расширениях, сохраняя при этом возможность добавлять обратно совместимые функции при отключении в будущем.
Прочее
static addInitializer(initializer): voidИсточник
Добавляет в класс функцию инициализации, вызываемую при создании экземпляра.
Параметры
- initializer
Initializer
Подробности
Это полезно для кода, который работает с подклассом ReactiveElement, например с декоратором, которому нужно выполнять действия для каждого экземпляра, например настраивать ReactiveController.
const myDecorator = (target: typeof ReactiveElement, key: string) => {
target.addInitializer((instance: ReactiveElement) => {
// This is run during construction of the element
new MyController(instance);
});
}
После этого декорирование поля приведет к тому, что для каждого экземпляра будет запущена функция инициализации, добавляющая контроллер:
class MyElement extends LitElement {
@myDecorator foo;
}
Функции инициализации хранятся отдельно для каждого конструктора. Добавление функции инициализации в подкласс не добавляет ее в суперкласс. Поскольку функции инициализации запускаются в конструкторах, они выполняются в порядке иерархии классов: начиная с суперклассов и далее до класса экземпляра.
static finalize(): booleanИсточник
Создает методы доступа к зарегистрированным свойствам, настраивает стили элемента и гарантирует, что все суперклассы также финализированы. Возвращает true, если финализация элемента завершена.
static finalized: booleanИсточник
Отмечает, что создание свойств класса завершено.
Свойства
static createProperty(name, options?): voidИсточник
Создает метод доступа к свойству в прототипе элемента, если он еще не существует, и сохраняет PropertyDeclaration для свойства с заданными параметрами. Сеттер свойства вызывает параметр свойства hasChanged или использует проверку строгого равенства идентичности, чтобы определить, следует ли запрашивать обновление.
Параметры
- name
PropertyKey- options?
PropertyDeclaration<unknown, unknown>
Подробности
Этот метод можно переопределить для настройки свойств; однако при этом важно вызвать super.createProperty, чтобы свойство было настроено правильно. Внутри этот метод вызывает getPropertyDescriptor для получения устанавливаемого дескриптора. Чтобы настроить поведение свойств при чтении или записи, переопределите getPropertyDescriptor. Чтобы настроить параметры свойства, реализуйте createProperty следующим образом:
static createProperty(name, options) {
options = Object.assign(options, {myOption: true});
super.createProperty(name, options);
}
static elementProperties: PropertyDeclarationMapИсточник
Мемоизированный список всех свойств элемента, включая свойства суперклассов. Создается лениво для пользовательских подклассов при финализации класса.
static getPropertyDescriptor(name, key, options): undefined | PropertyDescriptorИсточник
Возвращает дескриптор свойства, который нужно определить для свойства с заданным именем. Если дескриптор не возвращен, свойство не станет методом доступа. Например:
Параметры
- name
PropertyKey- key
string | symbol- options
PropertyDeclaration<unknown, unknown>
Подробности
class MyElement extends LitElement {
static getPropertyDescriptor(name, key, options) {
const defaultDescriptor =
super.getPropertyDescriptor(name, key, options);
const setter = defaultDescriptor.set;
return {
get: defaultDescriptor.get,
set(value) {
setter.call(this, value);
// custom action.
},
configurable: true,
enumerable: true
}
}
}
static getPropertyOptions(name): PropertyDeclaration<unknown, unknown>Источник
Возвращает параметры свойства, связанные с указанным свойством. Эти параметры задаются с помощью PropertyDeclaration через объект properties или декоратор @property и регистрируются в createProperty(...).
Параметры
- name
PropertyKey
Подробности
Обратите внимание: этот метод следует считать «финальным» и не переопределять. Чтобы настроить параметры конкретного свойства, переопределите createProperty.
static properties: PropertyDeclarationsИсточник
Предоставляемый пользователем объект, сопоставляющий имена свойств с объектами PropertyDeclaration, содержащими параметры настройки реактивных свойств. При установке реактивного свойства элемент обновляется и выполняет рендеринг.
Подробности
По умолчанию свойства являются открытыми полями, поэтому следует считать, что в первую очередь их могут задавать пользователи элемента — через атрибут или непосредственно через свойство. Как правило, свойства, изменяемые самим элементом, должны быть закрытыми или защищенными полями и использовать параметр state: true. Свойства, помеченные как state, не отражаются в соответствующем атрибуте. Однако иногда коду элемента необходимо задать открытое свойство. Обычно это следует делать только в ответ на взаимодействие с пользователем, уведомляя его о событии; например, флажок при щелчке устанавливает свойство checked и генерирует событие changed. Как правило, не следует изменять открытые свойства, содержащие непримитивные значения (объекты или массивы). В остальных случаях, когда элементу нужно управлять состоянием, следует использовать закрытое свойство с параметром state: true. При необходимости свойства состояния можно инициализировать через открытые свойства, чтобы обеспечить сложные взаимодействия.
Рендеринг
createRenderRoot(): Element | ShadowRootИсточник
Возвращает узел, в который должен выполняться рендеринг элемента; по умолчанию создает и возвращает открытый shadowRoot. Реализуйте этот метод, чтобы настроить место рендеринга DOM элемента. Например, чтобы выполнять рендеринг в дочерние узлы элемента, верните this.
readonly renderRoot: HTMLElement | ShadowRootИсточник
Узел или ShadowRoot, в который должен выполняться рендеринг DOM элемента. По умолчанию используется открытый shadowRoot.
static shadowRootOptions: ShadowRootInitИсточник
Параметры, используемые при вызове attachShadow. Задайте это свойство, чтобы настроить параметры shadowRoot; например, чтобы создать закрытый shadowRoot: {mode: 'closed'}.
Подробности
Обратите внимание: эти параметры используются в createRenderRoot. При настройке этого метода следует по возможности учитывать заданные параметры.
Стили
static elementStyles: Array<CSSResultOrNative>Источник
Мемоизированный список всех стилей элемента. Создается лениво для пользовательских подклассов при финализации класса.
static finalizeStyles(styles?): Array<CSSResultOrNative>Источник
Принимает стили, заданные пользователем через свойство static styles, и возвращает массив стилей, применяемых к элементу. Переопределите этот метод для интеграции с системой управления стилями.
Параметры
- styles?
CSSResultGroup
Подробности
Дубликаты стилей удаляются с сохранением последнего экземпляра в списке. Это оптимизация производительности, позволяющая избежать дублирования стилей, которое может возникать, в частности, при композиции с помощью наследования. Последний элемент сохраняется, чтобы по возможности не нарушать порядок каскада; предполагается, что наиболее важно, чтобы последние добавленные стили переопределяли предыдущие.
static styles?: CSSResultGroupИсточник
Массив стилей, применяемых к элементу. Стили следует определять с помощью функции-тега css, конструктивных таблиц стилей или импортировать из нативных CSS-модулей.
Подробности
Примечание о политике безопасности содержимого (CSP): если браузер не поддерживает подключенные таблицы стилей, стили элементов реализуются с помощью тегов <style>. Чтобы использовать такие теги <style> с директивой CSP style-src, значение style-src должно включать либо 'unsafe-inline', либо nonce-<base64-value>, где <base64-value> заменен на nonce, сгенерированный сервером. Чтобы задать nonce для создаваемых элементов <style>, установите window.litNonce в nonce, сгенерированный сервером, в HTML-коде страницы до загрузки кода приложения:
<script> // Generated and unique per request: window.litNonce = 'a1b2c3d4'; </script>
Обновления
enableUpdating(_requestedUpdate): voidИсходный код
Обратите внимание: этот метод следует считать окончательным и не переопределять. Он переопределяется для экземпляра элемента функцией, которая запускает первое обновление.
Параметры
- _requestedUpdate
boolean
firstUpdated(_changedProperties): voidИсходный код
Вызывается при первом обновлении элемента. Реализуйте метод, чтобы выполнить однократные действия с элементом после обновления.
Параметры
- _changedProperties
-
Map<PropertyKey, unknown> | PropertyValueMap<any>Карта изменённых свойств с их прежними значениями
Подробности
firstUpdated() {
this.renderRoot.getElementById('my-text-area').focus();
}
Изменение свойств внутри этого метода приведёт к повторному обновлению элемента после завершения текущего цикла обновления.
getUpdateComplete(): Promise<boolean>Исходный код
Метод для переопределения промиса updateComplete.
Подробности
Небезопасно напрямую переопределять геттер updateComplete из-за ограничения TypeScript, которое не позволяет вызвать геттер суперкласса (например, super.updateComplete.then(...)), если целевой язык — ES5 (https://github.com/microsoft/TypeScript/issues/338). Вместо этого следует переопределить этот метод. Например:
class MyElement extends LitElement {
override async getUpdateComplete() {
const result = await super.getUpdateComplete();
await this._myChild.updateComplete;
return result;
}
}
hasUpdated: booleanИсходный код
Устанавливается в true после первого обновления. Код элемента не может предполагать, что renderRoot существует до hasUpdated элемента.
isUpdatePending: booleanИсходный код
Равно true, если ожидается обновление в результате вызова requestUpdate(). Следует только считывать это свойство.
performUpdate(): void | Promise<unknown>Исходный код
Выполняет обновление элемента. Обратите внимание: если во время обновления возникает исключение, firstUpdated и updated вызваны не будут.
Подробности
Вызовите performUpdate(), чтобы немедленно обработать ожидающее обновление. Обычно в этом нет необходимости, но в редких случаях это можно сделать, если требуется синхронное обновление. Примечание: чтобы performUpdate() синхронно завершал ожидающее обновление, его не следует переопределять. В LitElement 2.x предлагалось переопределять performUpdate(), чтобы также настроить планирование обновлений. Вместо этого теперь следует переопределять scheduleUpdate(). Для обратной совместимости с LitElement 2.x планирование обновлений с помощью performUpdate() продолжает работать, но при этом затрудняется вызов performUpdate() для синхронной обработки обновлений.
requestUpdate(name?, oldValue?, options?): voidИсходный код
Запрашивает обновление, которое выполняется асинхронно. Этот метод следует вызывать, когда элемент должен обновиться на основании некоторого состояния, не связанного с установкой реактивного свойства. В этом случае аргументы не передаются. Его также следует вызывать при ручной реализации сеттера свойства. В этом случае передайте свойство name и oldValue, чтобы применялись все настроенные параметры свойства.
Параметры
- name?
-
PropertyKeyимя свойства, запросившего обновление
- oldValue?
-
unknownпрежнее значение свойства, запросившего обновление
- options?
-
PropertyDeclaration<unknown, unknown>параметры свойства, используемые вместо ранее настроенных
scheduleUpdate(): void | Promise<unknown>Исходный код
Планирует обновление элемента. Можно переопределить этот метод, чтобы изменить время обновления, возвратив Promise. Обновление будет ожидать выполнения возвращённого Promise; для продолжения обновления необходимо разрешить Promise. Если этот метод переопределён, необходимо вызвать super.scheduleUpdate().
Подробности
Например, чтобы запланировать обновление непосредственно перед следующим кадром:
override protected async scheduleUpdate(): Promise<unknown> {
await new Promise((resolve) => requestAnimationFrame(() => resolve()));
super.scheduleUpdate();
}
shouldUpdate(_changedProperties): booleanИсходный код
Определяет, следует ли вызывать update(), когда элемент запрашивает обновление. По умолчанию этот метод всегда возвращает true, но его поведение можно настроить, чтобы управлять временем обновления.
Параметры
- _changedProperties
-
Map<PropertyKey, unknown> | PropertyValueMap<any>Карта изменённых свойств с их прежними значениями
update(_changedProperties): voidИсходный код
Обновляет элемент. Этот метод отражает значения свойств в атрибутах. Его можно переопределить, чтобы отрисовывать DOM элемента и поддерживать его в актуальном состоянии. Установка свойств внутри этого метода не вызовет повторное обновление.
Параметры
- _changedProperties
-
Map<PropertyKey, unknown> | PropertyValueMap<any>Карта изменённых свойств с их прежними значениями
updateComplete: Promise<boolean>Исходный код
Возвращает Promise, который разрешается после завершения обновления элемента. Значение Promise — логическое значение true, если элемент завершил обновление, не инициировав повторное обновление. Результат Promise равен false, если свойство было установлено внутри updated(). Если Promise отклонён, во время обновления возникло исключение.
Подробности
Чтобы дождаться выполнения дополнительных асинхронных задач, переопределите метод getUpdateComplete. Например, иногда полезно дождаться отрисовки элемента, прежде чем разрешить этот Promise. Для этого сначала дождитесь super.getUpdateComplete(), а затем любого последующего состояния.
updated(_changedProperties): voidИсходный код
Вызывается после каждого обновления элемента. Реализуйте этот метод, чтобы выполнять задачи после обновления с помощью DOM API, например устанавливать фокус на элемент.
Параметры
- _changedProperties
-
Map<PropertyKey, unknown> | PropertyValueMap<any>Карта изменённых свойств с их прежними значениями
Подробности
Изменение свойств внутри этого метода приведёт к повторному обновлению элемента после завершения текущего цикла обновления.
willUpdate(_changedProperties): voidИсходный код
Вызывается перед update() для вычисления значений, необходимых во время обновления.
Параметры
- _changedProperties
Map<PropertyKey, unknown> | PropertyValueMap<any>
Подробности
Реализуйте willUpdate, чтобы вычислять значения свойств, зависящие от других свойств и используемые в остальной части процесса обновления.
willUpdate(changedProperties) {
// only need to check changed properties for an expensive computation.
if (changedProperties.has('firstName') || changedProperties.has('lastName')) {
this.sha = computeSHA(`${this.firstName} ${this.lastName}`);
}
}
render() {
return html`SHA: ${this.sha}`;
}
значение UpdatingElementИсходный код
Импорт
import { UpdatingElement } from 'lit';
Тип
ReactiveElementтип ComplexAttributeConverterИсходный код
Преобразует значения свойств в значения атрибутов и обратно.
Импорт
import { ComplexAttributeConverter } from 'lit';
Методы и свойства
fromAttribute(value, type?): TypeИсходный код
Вызывается для преобразования значения атрибута в значение свойства.
Параметры
- value
null | string- type?
TypeHint
toAttribute(value, type?): unknownИсходный код
Вызывается для преобразования значения свойства в значение атрибута.
Параметры
- value
Type- type?
TypeHint
Подробности
Возвращает unknown вместо string для совместимости с https://github.com/WICG/trusted-types и аналогичными инициативами.
тип PropertyDeclarationИсходный код
Задаёт параметры для аксессора свойства.
Импорт
import { PropertyDeclaration } from 'lit';
Методы и свойства
readonly attribute?: string | booleanИсходный код
Определяет, становится ли свойство наблюдаемым атрибутом и каким образом. Если значение равно false, свойство не добавляется в observedAttributes. Если значение равно true или не задано, отслеживается имя свойства в нижнем регистре (например, fooBar становится foobar). Если задана строка, отслеживается это строковое значение (например, attribute: 'foo-bar').
readonly converter?: AttributeConverter<Type, TypeHint>Исходный код
Определяет способ преобразования атрибута в свойство и обратно. Если это значение — функция, она используется для преобразования значения атрибута в значение свойства. Если это объект, он может содержать ключи fromAttribute и toAttribute. Если функция toAttribute не задана, а reflect установлено в true, значение свойства напрямую присваивается атрибуту. Если преобразователь converter не задан, используется преобразователь по умолчанию; он поддерживает Boolean, String, Number, Object и Array. Обратите внимание: когда свойство изменяется и преобразователь используется для обновления атрибута, последующее изменение атрибута больше не обновляет свойство, и наоборот.
readonly noAccessor?: booleanИсходный код
Определяет, будет ли создан аксессор для этого свойства. По умолчанию для этого свойства создаётся аксессор, который запрашивает обновление при установке значения. Если этот флаг равен true, аксессор не создаётся, и пользователь должен самостоятельно вызывать this.requestUpdate(propertyName, oldValue) для запроса обновления при изменении свойства.
readonly reflect?: booleanИсходный код
Определяет, следует ли отражать свойство в атрибуте. Если true, при установке свойства устанавливается атрибут с именем, определяемым по правилам параметра свойства attribute, и значением свойства, преобразованным по правилам параметра свойства converter.
readonly state?: booleanИсходный код
Если установлено значение true, свойство считается внутренним приватным состоянием. Пользователи не должны устанавливать это свойство. В TypeScript такое свойство следует пометить как private или protected; также часто в его имени используют начальный символ _. Свойство не добавляется в observedAttributes.
readonly type?: TypeHintИсходный код
Определяет тип свойства. Используется только как подсказка для converter, помогающая определить способ преобразования атрибута в свойство и обратно.
hasChanged(value, oldValue): booleanИсходный код
Функция, которая определяет, следует ли считать свойство изменённым при его установке. Функция должна принимать newValue и oldValue и возвращать true, если необходимо запросить обновление.
Параметры
- value
Type- oldValue
Type
тип PropertyDeclarationsИсходный код
Карта свойств и параметров PropertyDeclaration. Для каждого свойства создаётся аксессор, а само свойство обрабатывается согласно параметрам PropertyDeclaration.
Импорт
import { PropertyDeclarations } from 'lit';
тип PropertyValuesИсходный код
Карта ключей свойств и значений.
Импорт
import { PropertyValues } from 'lit';
Тип
T ? PropertyValueMap<T> : Map<PropertyKey, unknown>Подробности
Принимает необязательный параметр типа T. Если указан тип, отличный от any и unknown, типизация Map становится более строгой: ключи карты связываются с соответствующими типами значений в T. Используйте PropertyValues<this> при переопределении ReactiveElement.update() и других методов жизненного цикла, чтобы усилить проверку типов ключей и значений.
© Google LLC
Licensed under the Creative Commons Attribution 3.0 Unported License.
https://lit.dev/docs/v2/api/ReactiveElement/