React是否已经到达转折点?

176 阅读7分钟

在 React Server Component(RSC)功能发布后,Dan经常使用这个账号来推广各种 RSC 知识。这次封禁显然给他的传道工作造成了重大打击,迫使他开始使用一个新账号。尽管新账号没有太多的粉丝,但好消息是,他关于 RSC 的传道文章《The Two Reacts》的数据还算不错。

凌晨两点,Dan依然面带严肃表情坐在电脑前。

作为 React 社区最著名的传道者,他目前正在经历一场重大的动荡 — 他的 Twitter 账号,拥有 383.1k 粉丝,已被限流。

image.png

x.com/dan_abramov

限流就是指粉丝在他们的动态中看不到你的任何推文,他们必须点击进入你的个人资料才能看到最新的帖子。

React Server Component(RSC)功能发布后,丹经常利用这个账号推广各种 RSC 知识。这次封禁显然给他的传道工作造成了重大打击,迫使他开始使用一个新账号。尽管新账号没有太多的粉丝,但好消息是,他关于 RSC 的传道文章《The Two Reacts》的数据还算不错。

image.png twitter.com/dan_abramov…

这篇文章通过解释世界上有两种 React 来论证了 RSC 的必要性:

  1. 运行在客户端的 React,遵循 UI = f(state) 的原则,其中 state 指的是可变的状态。
  2. 运行在服务器端的 React,遵循 UI = f(data) 的原则,其中 data 指的是不可变的数据源。

RSC 为在服务器上运行的 React 提供了基础技术支持。

夜晚的寂静让Dan充满了回忆。他关闭了 MacBook Pro,回想起多年前的那次行业会议,当时在展示之前的一周,他匆忙准备了他的演讲示范(Redux 的早期版本)。那次会议是他加入伦敦 Meta 公司并进入 React 团队内部圈子的金钥匙。

然后,他的思绪飘到了 2018 年的 React Conf,当他揭开 Hooks 的面纱时,人群欢呼雀跃。

image.png

所有这些回忆让他不禁叹了口气 — 他曾经一起合作的老朋友都已经散落。

安德鲁·克拉克,他在 Redux 中的同谋,离开了(去了 Vercel),背后策划 Hooks 的Sebastian Markbåge也离开了(同样去了 Vercel),甚至他自己最终也离开了(去了 bluesky)。

React 依然是前端世界的王者,但在表面之下,有些事情正在发生变化。现在有什么不同呢?

React 正在面临声誉的十字路口。

作为一个 11 岁的前端框架,React 正逼近其声誉的转折点。

最近,包括知名库作者和 React 18 工作组成员在内的几位核心社区成员公开表达了对 React 的批评,例如:

有人可能会说,React 自诞生以来就受到了批评,有什么大不了的?

实际上,这种区别相当显著。从 React 创立到现在,批评通常围绕着开发者与 React 核心团队之间的意识形态争议,例如:

  • JSX 真的用户友好吗?这是一场意识形态争论。
  • 我们应该使用类组件还是函数组件?这也是一场意识形态争论。
  • 我们应该使用 Signal 技术吗?这仍然是一场意识形态争论。

尽管开源项目非常重视开发者的反馈意见,但 React 现在已经不能被视为普通的开源项目;它是一个庞大的技术生态系统。

在这个生态系统中,开发者的不满实际上并不会动摇 React 的基础。因为决定开发者在项目中使用 React 的是公司在考虑技术生态系统后做出的自上而下的选择,而不是他们个人的喜好或厌恶。

因此,React 的基础是技术生态系统(而不是开发者)。构成技术生态系统的是其中的大大小小的开源作者/团队。

这一轮对 React 的批评大多来自核心技术生态系统中的重要参与者,他们是支撑 React 建筑的支柱。

批评的主要原因是 — React 团队已经将 React 的开发紧密地绑定到一家商业公司(Vercel)上。

对于 React 核心团队的成员来说,这是从大型科技公司跳槽到独角兽公司的个人职业飞跃。但对于 React 技术生态系统中广泛的开源作者/团队来说,这是对一家商业公司(Vercel)的不情愿绑定。

例如,RSC 中有一个名为 Server Actions 的特性,旨在简化处理服务器端前端交互的过程。Vercel 是一家云服务公司,其 Next.js 支持 Server Actions,这完美地适合其自身无服务器服务的场景。

然而,其他开源项目可能无法从这个特性中获益。

再举一个例子,React Bricks 的创作者曾经抱怨 — 尽管在表面上,React 可以与 Vite 结合,可以与 React Router(Remix 的前身)结合,所有选择似乎都是自由的。但是上面的服务提供商表示:如果 React Bricks 不支持 Next.js,他们将不再使用它。

换句话说,React 正逐渐将自己的技术生态系统迁移到 Next.js 上,而技术生态系统是公司在制定技术决策时的主要考虑因素。如果一个开源库不积极地融入 Next 生态系统,公司在做技术选择时可能不会考虑这个库。

由于市场考虑,原始 React 生态系统下的许多库将迁移到 Next 生态系统,即使这样做并不是库作者的意愿(毕竟,Next.js 是由一家商业公司支持的)。

框架作者的反叛

普通的开源库只能被动选择是否跟随 Next 生态系统,还有另一类开源库选择直接与 Next.js 正面对抗,这些是 Meta 框架。

Meta 框架指的是在前端框架之上构建的更全面功能的高级框架,比如:

  • 框架 Vue,Meta 框架 Nuxt.js
  • 框架 React,Meta 框架 Remix,Next.js
  • 框架 Solid.js,Meta 框架 SolidStart
  • 框架 Svelte,Meta 框架 SvelteKit

还有一些框架本身就是 Meta 框架,比如 Angular 和 Astro。 从 NPM 的年度下载量来看,Next.js 基本上主导了这些竞争对手(在下表中,绿色代表 Next):

image.png

我们无法确定当前情况有多少是由于 Next.js 超越其他 Meta 框架,但有一件事是确定的 — React 生态系统向 Next 生态系统的迁移确实对当前形势产生了重大影响。

总结

对于 React 将其技术生态系统转向 Next 的不满情绪在社区中已经存在了很长时间,最近已经爆发了出来。从长远来看,这种不满情绪必然会影响到 React 的基础 — 技术生态系统。

但从全局视角来看,实际上没有人真正关心 React:

  • 开发者只关心他们是否能够稳定高效地完成工作。
  • 开源作者只关心技术生态系统市场是否足够大(并且没有被少数几家公司垄断)。
  • React 核心团队成员关心他们的职业前景。
  • Meta 框架的作者关心是否能开辟一个 Next 无法触及的市场空间。

React 就像一个被开采了 11 年的金矿;所有开采它的人都有抱怨,但他们仍在不停地挥舞着他们的镐头。

随着 React 逐渐将其技术生态系统迁移到 Next,React 只会在一些细节上保留下来,例如:

  • Hooks 的执行顺序不能改变。
  • 在严格模式下组件会渲染两次。

作为商业实体,Vercel 将来可能会基于市场考虑逐步优化这些特性(比如引入 Signal)?

如果 React 注定要消失,它的消亡不会像烟花一样突然而壮观(就像 Google 宣布开发 Angular2,Angular1 在引人注目的高潮中结束)。

更有可能的情况是,就像忒修斯号船一样,在航行中不断更换旧的木板,最终悄然消失...