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