Обзор композиции
Композиция — это стратегия управления сложностью и организации кода в повторно используемые части. Lit предоставляет несколько способов композиции и повторного использования кода:
- Композиция компонентов.
- Реактивные контроллеры.
- Примеси классов.
Композиция компонентов — это процесс сборки сложных компонентов из более простых. Компонент может использовать вложенные компоненты в своём шаблоне. Для взаимодействия компоненты могут использовать стандартные механизмы DOM: задавать свойства вложенных компонентов и прослушивать их события.
Хотя композиция компонентов — основной способ разделить сложный проект на Lit на более мелкие части, есть ещё два примечательных шаблона работы с кодом, полезных для структурирования кода Lit:
Реактивные контроллеры — это объекты, которые могут подключаться к жизненному циклу обновления компонента Lit и инкапсулировать состояние и поведение, связанные с определённой функцией, в отдельную единицу кода.
Примеси классов позволяют создавать повторно используемые частичные определения компонентов и «примешивать» их к цепочке наследования компонента.
И примеси, и реактивные контроллеры позволяют выделить логику компонента, относящуюся к определённой функции, в повторно используемую единицу. Сравнение контроллеров и примесей приведено в следующем разделе.
Контроллеры и примеси
Контроллеры и примеси классов во многом очень похожи. Оба подхода позволяют подключаться к жизненному циклу компонента-хозяина, хранить состояние и инициировать обновления компонента-хозяина.
Главное различие между контроллерами и примесями заключается в их отношении к компоненту. Компонент находится в отношении «имеет» к реактивному контроллеру, поскольку владеет им. Компонент находится в отношении «является» к примеси, поскольку компонент представляет собой экземпляр класса-примеси.
Реактивный контроллер — это отдельный объект, принадлежащий компоненту. Контроллер может обращаться к методам и полям компонента, а компонент — к методам и полям контроллера. Однако контроллер недоступен (или доступен с трудом) тому, кто использует компонент, если компонент не предоставляет для него публичный API. Методы жизненного цикла контроллера вызываются до соответствующего метода жизненного цикла компонента.
Примесь, напротив, становится частью цепочки прототипов компонента. Все открытые поля и методы, определённые примесью, входят в API компонента. А поскольку примесь является частью цепочки прототипов, компонент в некоторой степени контролирует, когда вызываются обратные вызовы жизненного цикла примеси.
В целом, если вы решаете, оформить ли функцию в виде контроллера или примеси, выбирайте контроллер, если только эта функция не требует одного из следующего:
- Добавления публичного API к компоненту.
- Очень точного контроля над жизненным циклом компонента.
© Google LLC
Licensed under the Creative Commons Attribution 3.0 Unported License.
https://lit.dev/docs/composition/overview/