为什么 React 社区没有意识到 Web 组件的重要性

2025-05-24

为什么 React 社区没有意识到 Web 组件的重要性

我是一名多面手 Web 开发者,接触过一些库。我不认为自己是任何技术方法的纯粹主义者或布道者,尤其是在前端方面。也就是说,我觉得自己在 Web Components 的争论中没有优势,但我觉得这次讨论很有意思。

最近在一次关于技术趋势的讨论中,我和@bennypowers聊了聊关于 Web 组件的讨论,以及来自 Web 社区的反对意见。无论你对这个问题持何种立场,我都觉得这条评论非常值得一读。

依我拙见,React 社区对其库的投入过于沉重。鉴于其库的巨大成功,我可以理解这一点,但我确实认为泡沫最终会破灭。明智的开发者应该开始磨练自定义元素的使用技巧,并在下一个项目中考虑使用它们。

React 与 Web Components 是错误的二分法。

由于 Web 组件是浏览器标准,因此它们在 React 组件中与 React 组件一样可用div。由于 React 与 DOM 交互的方式比较特殊,自定义事件有一些小问题需要注意,但也有一条常用的解决方法来规避 React 在这方面的怪癖。顺便说一句,Preact 在很大程度上缓解了这些问题。
虽然我认为 Web 组件在技术上优于 React 组件,因为它们原生支持 Web 浏览器,无需开发人员与浏览器对抗,但实际上两者之间并不矛盾。

React 是明天的 MooTools

React 如今确实非常流行,但这并非总是如此。它<span>不会消失,也不会消失querySelector,但我们已经看到许多库框架逐渐被淘汰。与此同时,Web 组件凭借其明显的面向未来的优势,以及浏览器和库之间的互操作性,在企业领域获得了越来越大的关注。

如今,Web Components 已得到广泛支持

现在 Firefox 已经支持 Shadow DOM 和自定义元素,Edge 团队也宣布了即将发布的计划,Web 组件标准才真正到来,并成为该平台的一大亮点。我认为,上个月我们在社交媒体上看到大量针对 WC 的批评并非巧合。如今,这些标准的落地对纯 JS 组件模型构成了更严峻的威胁。

围绕WC的FUD是没有道理的

React-world 中许多反对 Web Components 的争论都归结于

  • 标准不被接受
  • 他们很难合作
  • 他们无法做到 React 所做的

但这根本不是事实。现已弃用的 v0 标准不再受支持,它们已被 v1 标准取代,正如我们所见,v1 标准得到了广泛的支持。
虽然标准中描述的低级 API 确实可能很繁琐,但像 hybridsjs 或 lit-element 这样的库和基类可以平滑这些障碍,只会稍微增加 js 页面加载大小。
就功能而言,Web 组件库可以完成 React 的所有功能,甚至更多,而无需 VDOM 开销或由这种抽象带来的认知和工具复杂性——Web 组件开发工具就是浏览器/DOM 开发工具。

轶事

我有个朋友在一家浏览器供应商工作。几年前,他的团队正忙于使用 React.js 构建浏览器 UI 和功能。尽管他称赞了单向数据流与中央存储架构的优雅(现在可以通过 GluonElement 或 LitElement 等自定义元素基类以及 redux 等状态容器轻松实现),但他还是抱怨 React.js 库的性能限制(这是他的话)。我建议他尝试一下 Web Components,因为性能限制在于浏览器本身,而不是 JS 库。他给同事发了个即时通讯。几年过去了,你瞧,这家浏览器供应商目前正在用他们自己的基于 Web Components 的库重写他们的 UI 组件。

概括

React 为 Web 开发社区带来了很多精彩的东西。

  • UI 的功能性方法
  • 单向数据流模式
  • 普及组件模型

但它也带来了很多负担。

  • 关于直接与 DOM 合作的 FUD
  • 繁琐且不必要的工具
  • 普遍的误解是 React 是实现基于组件的 Web UI 的唯一方法

如今,您可以构建一个模块化、基于组件的前端应用,无需任何浏览器标志、构建步骤、打包或除浏览器和文本编辑器之外的其他工具。而且它可以在所有主流浏览器上运行。

我很清楚,未来将建立在开放标准之上,而不是定制实现。无论 React 为 Web 社区做出了多少贡献(我希望我清楚地认识到了这些贡献),它都无法与之匹敌。

如果您想了解有关 Web 组件的更多信息,B​​enny 是少数发布有关该主题的精彩教程的 DEV 成员之一。

编码快乐❤️

文章来源:https://dev.to/ben/why-the-react-community-is-missing-the-point-about-web-components-1ic3
PREV
编写干净的代码并避免新兴技术的干扰
NEXT
在几毫秒内渲染一个复杂的 Web 应用程序需要什么