课程章节介绍
同学们,今天咱们聊聊Lightning Web Components里的混合阴影模式。这个概念听起来有点绕,但其实就一句话:你想让某个组件用浏览器原生的Shadow DOM,就在它的JavaScript类里加一个静态属性,像这样:
static shadowSupportMode = 'native';
一旦你给一个父组件设成了“native”,它的整个子树里所有的子组件,不管它们自己怎么设置,都会被迫用原生模式。简单说,就是父级说了算,原生模式会向下强制继承,哪怕子组件想逃也逃不掉。
但有没有例外呢?有,但不多。LWC提供了一个“reset”值,如果某个子组件明确设置为“reset”,它表示“我想退出继承来的原生模式”,但前提是它上面没有祖宗组件设成了“native”。注意,我说的是“没有祖宗”,也就是说,只要祖辈里有一个原生的,那整个链条全都被钉死了,reset也没用。所以原生像一个从上往下的铁幕,reset只能在没有原生祖先的情况下起效。
那父子关系出现“插槽”时怎么办呢?插槽的内容由谁决定?规则是这样的:插槽里的内容,看的是拥有这段内容的那个组件的设置,而不是提供插槽的组件。比如一个合成模式的组件往一个原生组件的插槽里塞内容,这段内容仍然保持合成模式,不会被原生模式吞掉。反过来也行,混合使用就很灵活。
最后,我们把这个继承关系用表格说得更清楚一点:父组件是“native”,下面无论子孙设什么都没有用,全是native;父组件是“reset”或者没设置,子组件如果坚持设“native”,那它就勇敢地变成原生,旁边的兄弟不受影响。
所以核心就这三板斧:native父级强制所有子级原生;重置只有在无原生祖先时生效;插槽内容的模式看内容拥有者。这样设计,既保证了局部选择原生带来的性能好处,又保留了合成模式的灵活注入,咱们在真正项目里就能按需混用了。
关键词
LWC
Lightning Web Components
Salesforce