组合概述
组合是一种管理复杂度和将代码组织为可复用单元的策略。Lit 提供了几种组合和代码复用的选项:
- 组件组合。
- 响应式控制器。
- 类混入。
组件组合 是将简单组件组装为复杂组件的过程。组件可以在其模板中使用子组件。组件可以使用标准的 DOM 机制进行通信:设置子组件的属性,以及监听子组件的事件。
虽然组件组合是思考如何将复杂的 Lit 项目拆分为更小单元的默认方式,但还有两种值得注意的代码模式可用于分解你的 Lit 代码:
响应式控制器 是可以挂接到 Lit 组件更新生命周期中的对象,将与某个功能相关的状态和行为封装到单独的代码单元中。
类混入 允许你编写可复用的部分组件定义,并将它们"混入"到组件的继承链中。
混入和响应式控制器都允许你将与特定功能相关的组件逻辑分解为可复用的单元。请参阅下一节了解控制器和混入的对比。
控制器与混入
Permalink to "控制器与混入"控制器和类混入在某些方面非常相似。它们都可以挂接到宿主组件的生命周期中,维护状态,并触发宿主更新。
控制器和混入的主要区别在于它们与组件的关系。组件与响应式控制器之间是"拥有"(has-a)关系,因为组件拥有控制器。组件与混入之间是"属于"(is-a)关系,因为组件是混入类的实例。
响应式控制器是由组件拥有的独立对象。控制器可以访问组件上的方法和字段,组件也可以访问控制器上的方法和字段。但使用组件的人无法(轻易地)访问控制器,除非组件公开了相关 API。控制器的生命周期方法会在组件上对应的生命周期方法_之前_被调用。
另一方面,混入会成为组件原型链的一部分。混入定义的任何公共字段或方法都是组件 API 的一部分。而且由于混入是原型链的一部分,你的组件可以在一定程度上控制混入的生命周期回调何时被调用。
通常来说,如果你正在决定是将某个功能封装为控制器还是混入,你应该选择控制器,_除非_该功能需要以下其中之一:
- 向组件添加公共 API。
- 非常细粒度地访问组件生命周期。