Container — Contained Within the Owner

DEX475 - Composition

📄 第 67 页 🎬 视频课程

课程章节介绍

同学们,我们接下来聊聊组件之间的一种特殊关系——容器、所有者和子组件。想象一下,一个页面结构就像一棵树,根组件在最上面,下面挂着各种子组件。在这棵树上,有时会出现一个处于中间的组件,我们叫它“容器”。容器夹在所有者和子组件之间,它比所有者更“强大”一些,因为它可以直接调用子组件上的方法,就和自己拥有子组件一样。 但是,这种强大有两条严格的规矩,这正是LWC单向数据流的核心设计。 第一条,容器只能读,不能改。它可以访问子组件暴露出来的公共属性,但绝不能修改它们。任何属性的变更,必须由真正的所有者来执行,就像只有物品的主人才有权决定换掉它一样。 第二条,关于事件监听。容器只能接收那些通过DOM正常冒泡上来的事件。如果子组件发出了一个不冒泡的,或者在中途被停止冒泡的事件,容器是根本感知不到的。这就好比在一栋楼里,容器只听得见通过楼梯层层上传的喊话,如果有人关了房间门小声嘀咕,它就听不见了。 为什么要这样设计呢?是为了防止“中间人乱插手”。如果每个容器都能随意改子组件的状态,数据流会变得不可预测,很容易产生难以调试的副作用。所以,LWC强制只有组件的创建者——也就是真正的所有者,才有资格修改内部数据,从而保证整个应用的数据流动是清晰、单向的。这样我们写代码时心里就更有底,知道变化只会来自明确的地方。 好了,这就是关于容器权限边界的解释,大家理解了吗?

关键词

LWC Lightning Web Components Salesforce