课程章节介绍
来,同学,今天咱们聊聊 Lightning Web Components 里事件传播的一个特别省心的默认配置。你把它记住,能省掉不少麻烦。
想象一下,你是一个组件作者,你只想让爸爸妈妈知道你做了啥,不想让爷爷、太爷爷也知道。这时候,咱们就可以用 LWC 默认给你准备好的传播方式:,bubble 设为 true,composite 设为 false,。
这几个参数是干嘛的呢?简单说,bubble 控制了事件会不会像水泡一样往上面冒,composite 决定了它能不能穿透那个叫“阴影边界”的东西,去影响影子世界的外面。默认的设置就是:会冒,但,冒不出你自己的那个影子边界,。
所以,只有那个直接把你的组件包起来的“直接父组件”,才能监听到这个事件。爷爷、太爷爷,统统听不到。这就让这个事件变成了你和爸爸之间的小秘密,爸爸不用跟别人解释,别人也不用知道你到底干了啥——因为它成了一种实现细节,而不是一个公开的 API。
你试着在“c-child”组件上面放一个事件处理,然后在处理函数里打印一下 event.currentTarget 和 event.target,你会发现它们都指向了同一个东西:就是这个 c-child 宿主元素。事件没往更深或更广的地方去。
有一个很好的例子,就是 lwc-recipes 里的 c-contract-list-entry 组件。它内部会调度一个叫“selected”的事件,用上了这个默认配置。结果呢,只有它的直系父级,也就是列表容器,能听见这个事件,其他外面的组件根本感知不到。这种隔离开的设计,让内部修改特别自由,不会不小心把外面的世界弄乱。
所以,老师给你的建议是:,每次设计事件,先从这个默认配置开始,。这是破坏性最小的,也是最安全的选择。什么时候你要改动它呢?只有当你真的有一个明确的需求——比如非得让祖辈组件知道这件事,或者必须让它能穿过影子边界往外传——这时候你再考虑把 bubble 或 composite 的值加大。别一上来就加,先默认,再按需调整,你的组件就能既干净又好维护。
记住这个小原则,你写组件会越来越有章法。好,咱们就讲到这儿,有什么问题随时问。
关键词
LWC
Lightning Web Components
Salesforce