Hotdry.
web

Web Components:无需框架的复兴

解析 Web Components 复兴背后的技术驱动:原生组件模型、Shadow DOM 与跨框架互操作性的工程实践。

近年来,前端开发领域正在经历一场静默的变革。当 React、Vue、Angular 等框架占据主导地位多年之后,原生 Web Components 技术正在以 “无需框架” 的姿态重新进入开发者的视野。2025 至 2026 年间,这一趋势愈发明显,越来越多的团队开始重新评估 Web Components 的工程价值,探索其在现代前端架构中的独特位置。

平台能力的悄然成熟

这场复兴的根本驱动力在于浏览器平台本身的能力已经追平甚至超越了当年框架被发明时所要解决的问题。Custom Elements 允许开发者定义自定义 HTML 标签及其行为,Shadow DOM 提供了真正的样式封装,模板和插槽机制实现了灵活的组件组合,而原生事件系统则让组件间的通信变得简洁而解耦。这些特性并非实验性功能,已在所有主流浏览器中稳定支持多年。

一个最小的自定义元素实现仅需几行代码即可完成。通过继承 HTMLElement 并在 connectedCallback 中定义行为,开发者可以立即创建可复用的 UI 组件。这种极低的准入门槛与框架时代复杂的环境配置形成了鲜明对比。更重要的是,这些代码直接运行于浏览器之中,无需额外的运行时依赖,Bundle 体积可以显著缩小。

摆脱升级 treadmill 的困境

每一个框架都承载着隐性成本。初始的学习曲线固然存在,但更大的负担来自于持续的维护: major 版本升级可能破坏现有功能,过时的模式需要迁移,构建工具链需要不断更新。当你的组件仅由 HTML、CSS 和 JavaScript 构成时,除了自身代码之外几乎没有什么需要 “升级” 的内容。

基于平台标准构建的 Web Components 完全规避了这一问题。浏览器供应商对向后兼容性的承诺是框架维护者无法企及的。十年前按照 Web 标准编写的代码至今仍能正常运行,而 Angular 1、React 类组件或 Vue 2 的代码则难以享受这种稳定性。对于需要长期运行的产品而言,这种稳定性意味着更少的潜在故障点、更少的安全漏洞风险,以及更少的抽象层介于代码与运行时之间。

组件通信的优雅之道

Web Components 的优雅之处在组件通信机制上体现得尤为深刻。原生的 Custom Events 系统为复杂的组件交互提供了所需的一切。 UI 层级深处的一个组件可以派发一个能够向上冒泡的自定义事件:

this.dispatchEvent(new CustomEvent('item-selected', {
  detail: { itemId: this.selectedId, metadata: this.itemData },
  bubbles: true,
  composed: true
}));

任何祖先组件或应用 Shell 本身都可以监听并响应这个事件。无需全局状态存储,无需属性层层传递,无需 Context 提供者。DOM 本身就成了通信基础设施。组件也可以通过属性和属性变化向下传递数据。当父组件改变属性时,子组件的 attributeChangedCallback 会被触发,给予其响应的机会。这种数据向下流动、事件向上冒泡的自然模式,正是 React 曾经推广的概念,但实现方式使用的是 Web 标准而非框架抽象。

Shadow DOM:真正有效的封装

Web Components 最具实践价值的特性之一是 Shadow DOM 带来的样式封装。你的组件样式不会泄漏出去,全局样式也不会泄漏进来,除非你明确允许这种情况发生。那些样式仅影响当前组件,可以使用简单、语义化的类名而无需担心命名冲突。这种封装是真正有效的封装,正是 CSS Modules、CSS-in-JS、BEM 以及无数其他方案试图实现却难以完美达成的目标 —— 它被直接构建在了平台之中。

框架自由但非反框架

需要明确的是,“无需框架” 并不等同于 “反对框架”。开发者完全可以仅使用原生 Web Components 构建完整应用,借助 DOM 事件进行通信而无需全局存储、属性传递或 Context,这确实能使协调逻辑更加简洁和松耦合。更重要的是,Web Components 与框架无关:同一个自定义元素可以直接在 React、Vue、静态 HTML 或 CMS 页面中使用,这对于拥有多种技术栈或采用微前端的组织而言极具价值。

许多团队选择了混合路径:将可复用的 UI 作为 Web Components 编写,然后在 React 或 Vue 的 Shell 中消费它们。这样一来,框架迁移就不会迫使核心 UI 组件或设计系统进行重新设计。Lightlit 等轻量级库如 Lit 和 Stencil 专注于让 Web Components 的编写更加符合人体工程学,提供模板、响应式系统和 TypeScript 支持,同时输出的仍然是符合标准的自定义元素。

何时框架仍然更合适

Web Components 并非总是最佳选择。如果你的团队已经深入掌握 React 并能快速迭代,共享的专业知识本身就是巨大的价值。如果你要构建的产品将由习惯于框架模式的开发者维护,Web Components 可能会造成摩擦。

但对于新项目而言,特别是小团队或独立开发者构建需要长期运行的产品,Web Components 值得认真考虑。降低的复杂度、改进的稳定性以及更小的 Bundle 体积都能带来真实优势。各种框架如今与 Web Components 的配合也已经相当成熟,你可以逐步将自定义元素引入现有的 React 或 Vue 应用,可以将 Web Components 包装在框架特定的绑定中,迁移可以是渐进式的而非革命性的。

重新发现平台的可能性

我们正身处一个有趣的转折点。平台已经追平并在某些方面超越了使框架在十年前变得必不可少的能力。工具已就绪,浏览器支持已普及,模式已被充分验证。JavaScript 生态系统的复杂性已经成为公认的问题,更简单、更稳定基础架构的吸引力随着开发者对频繁变更的厌倦而增长。AI 助手使学习新方法变得更快、更不令人生畏。

Web Components 提供了构建现代复杂界面的能力,使用的是即使在数十年后仍将正常工作的技术。对于愿意探索框架主流之外的开发者而言,一条更安静、更优雅的道路正在等待。工具已准备就绪,浏览器已准备就绪,也许是时候重新发现 Web 平台能够做什么了。


参考资料

  • Caimito: 《Web Components: The Framework-Free Renaissance》
  • Talent500: 《Web Components in 2026: Why Native UI Is Back in Demand》
  • DEV Community: 《The Modern 2025 Web Components Tech Stack》
查看归档