Light DOM — Guidelines & Security Considerations

DEX475 - Work with the DOM

📄 第 187 页 🎬 视频课程

课程章节介绍

我们来看看这个关于“轻型 DOM”和“影子 DOM”的要点。 简单来说,Lightning Web Components 里,你可以选择两种封装模式:一种叫“影子 DOM”,另一种叫“轻型 DOM”。 影子 DOM 就像给你的组件加了一层保护罩,外面的代码无法随便看到或改动里面的结构,安全性很高。但缺点是不够灵活,有时你想让外面能控制一些样式,就得费点劲。 轻型 DOM 恰恰相反,它完全敞开,页面上任何地方的代码——哪怕是别的公司写的组件——都能读取甚至修改你组件的内部结构。这就带来了灵活性,但也牺牲了安全感。 所以,这里给了一个很实用的建议:别直接用轻型 DOM 来装敏感数据。推荐的架构是,在顶层用一个影子 DOM 做“安全外壳”,里面再放轻型 DOM 的子组件。这样既能在影子根内部共享全局样式,又能在边界处保证安全,一举两得。 不过要注意,轻型 DOM 里有些功能是用不了的。比如: - 不能限制命名空间 - 没办法在包之间分发组件 - 基础组件只能永远是影子 DOM - 不能嵌入 Aura 组件 - 没有插槽的生命周期钩子 - 也不支持在循环里用内部插槽 最后,如果你想从影子 DOM 把样式穿透到轻型 DOM 的子元素,正确的方式还是用 CSS 自定义属性,或者用 `::part` 伪元素,这两个是专门用来传递样式的扩展点,安全又规范。 好,这一页的重点就是这些,记住:用轻型 DOM 要谨慎,敏感数据一定要包在影子 DOM 里。

关键词

LWC Lightning Web Components Salesforce