HTML/CSS 似乎 React 现在已经赢了 Web Component

ericguo · 2024年10月17日 · 最后由 ericguo 回复于 2024年10月17日 · 222 次阅读

https://www.baldurbjarnason.com/2024/liskovs-gun/

v0 和 v1 的差异太大,应该导致 SolidJS 作者很怒,间接证明了相比之下还是 React 稳定,毕竟只要 React 19 只要多加一行就能兼容 18。

https://thenewstack.io/how-microsoft-edge-is-replacing-react-with-web-components/

另外还有做的越来越差的 Edge 站台 web component 助攻,从我个人角度解读,应该是一个负面因素(但显然 Edge team 不这样想)

怎么我觉得这两篇文章都是推 Web Component 的。

Web Component 胜在可交互性,现在 js 框架互相不兼容,用 react 写的组件要用在 react 组件里面。兼容也不是不行,只是要做很多适配器,估计没人这么用。而 Web Component 可以用在 erb,也可以用在 react。

我正在写一篇博客,Rails 开发者应该拥抱 Web Component。

作者语气肯定没我说的那么直白,客气了很多,但是说了好几个论点

  1. v0 到 v1 是不兼容的,让人想起了微软的 wp7 到 wp8,或者 angular.js 到 angular,Google 实际上打击的 web component 的最死忠的那批人(包括 solid.js 作者)
  2. React 和 Web Component 是几乎同时发布的(React 其实还晚了一年,2012 年发布)但是现在大家也看到了 React 的采用率实在是太高了。
  3. 一个技术是革命性的,就必须要有革命性的观点或者口号。React 有 UI=f(state) 这种近乎于数学公式 F=ma 的口号,且不说对不对,光这个美感就很惊人了,另外 Unidirectional data flow,作者是认为这个是魔法,是银弹,实际上推崇之情已经溢于言表了。
  4. Web Component 目前只有 Chrome 系支持,Safari 缺席基本就意味着这个标准不是标准了
  5. 作者认为 Web Component 采取的是一种渐进性的 DOM 改动,但是同时也写了 Google 的人在各个场合都说不用 Web Component 的应用都是 Legacy,讽刺意味其实很浓了。
  6. 作者还是说了 Web Components 的好处,就是不是那么容易上手,所以可以避免 commodifying developers(感觉可以翻译成码农?)的出现,但是实际上各大公司都不约而同的选择了 React,选择了码农路线,所以这个到底是算好处么。。。。

Web component 已经被主流浏览器支持了。我看了下 caniuse,safari 不支持的只是 is 属性,也就是修改内置元素的能力。现在看来不允许修改是有道理的,各个浏览器内部实现不一样,很难说修改内部元素会产生什么问题。但这个特性不影响 web component 应用。

浏览器 API 的演变就是很缓慢的,通常要落后于第三方框架。但一旦成为标准,其他框架就可以精简一大堆内容。例如 jQuery 和 querySelector,曾经有一个庞大的 jQuery 生态,标准演进后就消亡了。

我不是说 react 会消亡,因为现在有很多应用和生态构建于 react。而是当更多开发者了解 Web component,那么基于 Web 标准构建的组件会越来越多。

你说的 caniuse 肯定是对的,但是作者在文章还提到了 apple 的故意 slow-walk 改进 web,当然这些问题随着 v1 的发布似乎都解决了,而且作者还说一些小框架,特别是 solid.js 作者,很早就开始试图通过采用 web component 从 react 这边抢夺采用率,但是架不住这句:

This is the background that led Ryan Carniato, the author of SolidJS, to write his blog post Web Components Are Not the Future.

毫无疑问,跳反杀伤力最大的还得是曾经的支持者。

我当然对 web component 演讲没有 @Rei 那么深入,不过作为吃瓜群众,觉得这文章还是挺有话题性的,无论如何。。。

ericguo 回复

v0 这个版本号一看就很不靠谱 😂

v1 是 2017 年提的,也过去很久了。

Lit 3.0 是 2023 年发布的,这个时候我才开始认真考虑。

最近实际在项目里面用了感觉可以了,最大的吸引力是它跟 Turbo 兼容。

嗯,作者后面结尾还是圆了一下,不过标题其实还是反 web component 居多,Liskov’s Gun/Checkov’s gun,我理解的言下之意是既生瑜何生亮,总要留一个的话,还是 React。

这文章写的挺好的,大家可以用 AI 工具尽量反驳我了,毕竟我直接读的原文……

需要 登录 后方可回复, 如果你还没有账号请 注册新账号