Пользовательские веб-компоненты устанавливают свойства в connectedCallback

Я разместил аналогичный вопрос в стеке Salesforce, где контекстом являются веб-компоненты Lightning. (который является просто расширением веб-компонентов HTML). Я спрашиваю здесь, потому что хочу охватить более широкую аудиторию.

В своей документации говорится, что не рекомендуется получать / устанавливать свойства пользовательского компонента в хуке connectedCallback (). Кто-нибудь здесь знает, почему была дана эта рекомендация, поскольку я использую этот крючок специально для получения / установки свойств.


person Michael Munta    schedule 04.03.2021    source источник
comment
Этот стек LWC имеет намного больше трафика, чем тег [веб-компонент] здесь, в StackOverflow; так что я не жду лучшего ответа «здесь». Может быть, лучше спросить github.com/salesforce/lwc/issues.   -  person Danny '365CSI' Engelman    schedule 04.03.2021


Ответы (1)


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

Это не техническое ограничение как таковое; это больше похоже на хорошие архитектурные рекомендации при работе с веб-компонентами.

Общее практическое правило:

  1. Используйте connectedCallback для одноразового использования, например, шаблонов, настройки наблюдений (убедитесь, что наблюдения очищены в disconnectedCallback.
  2. Используйте getters и setters для управления наблюдателями за собственностью. Кроме того, не обрабатывайте асинхронные рабочие процессы в установщиках. Пример Promise.then() и т. Д. Причина в том, чтобы правильно обработать отмену для уже запущенных запросов при изменении свойства. Таким образом, используйте наблюдаемые, предпочтительно установленные в connectedCallback.
person Harshal Patil    schedule 08.03.2021
comment
Это полезная информация, но тем временем я получил ответ по обмену Salesforce, и оказалось, что это была ошибка в документации LWC. Тем не менее я приму этот ответ. - person Michael Munta; 08.03.2021