当 2020 年底 React 团队引入“零捆绑大小 React 服务器组件”概念时,许多人一直并且仍然难以理解它。现有框架都不支持新概念,原型也没有提供构建现实世界应用程序的可用基础。
现在,四年多过去了,所需的 React 版本仍处于测试阶段,尚未发布到生产环境,并且支持它的唯一大型知名框架由前 React 团队成员组成。对于少数试图提供基于 RSC 的替代框架的开发人员来说,这是一个非常悲伤的情况。
普通的 React 是一个仅专注于提供快速声明性解决方案来在浏览器中构建应用程序的库。浏览器中的应用程序始终需要服务器来获取和存储其状态。基于这一事实,大量的解决方案被开发出来并存在于 React 客户端生态系统中。当越来越多的人开始使用 Typescript 创建后端时,下一个趋势是带有类型化接口的 RPC 的复兴,它在后台创建了 api 端点。
查看 RSC 的这些要求,很快就会发现所有这些都在 RSC 的范围内,因为它们提供:
这允许应用程序开发人员使用 React 来定义所有组件,无论它们是在客户端还是服务器上渲染。这种集成环境降低了现代应用程序的复杂性,并消除了后端和前端中重复的业务逻辑的冗余。
由于 React 库仍是官方测试版,因此它们都不应该被视为生产就绪:
目前只有 Next.js 在某种程度上可用于生产。他们的版本 15 是 RSC 的第四次迭代,从 2021 年底开始发布版本 12。
除了列出的框架之外,这里还有一些存储库,其中包含构建 RSC 框架的蓝图 - 如果您想了解更多有关内部结构的信息,请使用它们:
如果您了解更多框架,请在评论中提供它们的链接。
基于 React 客户端应用程序现有的优秀捆绑器进行转录和捆绑非常简单。有多种选项可以执行此操作,最常用的选项之一是使用 ViteJs 作为开发服务器和捆绑器。提供 JavaScript 前端和后端堆栈的框架仍然必须提供自己的解决方案来处理开发和生产中的打字稿和捆绑。
使用 RSC,捆绑器需要处理至少三个转录和捆绑管道:
在 Vite 版本 6 发布之前,这需要大量特殊代码来提供有效的解决方案。 Next.js 只是在版本 15 中切换到 Turbopack 来修复由于 webpack 的复杂性和使用而导致的滞后问题,而 webpack 从来都不是为了处理此类问题而构建的。
Vite 6 的新功能是许多针对框架作者的,并通过他们的新环境 api 提供了一个很好的解决方案。
基于现在组件在完全不同的环境中渲染的事实,需要构建每个React库,通过提供替代内容来处理每个环境的限制。目前,大多数库都可以处理在服务器上渲染以创建 SSR 内容,但许多浏览器特定的 API 缺失。渲染 RSC 组件会给不同的 React 服务器库带来额外的限制,例如,它不支持 React 上下文和状态以及需要它为所有子组件提供主题的中断库。并且库需要在 packages.json 和 ESM-Modules 中为库和所有相关子库提供适当的导出选项。
RSC 的 React 库没有提供的第二个部分是路由器。如果没有处理客户端和服务器路由的路由器,React 服务器组件不知道要在服务器上呈现哪个状态。这就是为什么每个框架都有自己的路由器实现的原因,并且在其 api 标准化之前,为一个框架开发的服务器和客户端组件将需要更改以与另一个框架一起使用。
有关 React Server 组件的更多详细信息可以在 React 官方文档中找到。
元框架的可选要求:
事实上,Next.js 15 是最主流的 RSC 框架,为什么我需要考虑替代框架?
这样做的原因始终基于要达到的目标,但我会尝试列出一些考虑其他选项有意义的原因:
请记住,本文仅关注提供 RSC 的替代方案,但还有更多框架提供与 RSC 几乎相似的功能,并且可能是比本文列出的 RSC 框架更好的替代方案。
由加藤大师开发:
Waku (wah-ku) 或わく在日语中的意思是“框架”。作为最小的 React 框架,它旨在加速初创公司和机构的开发人员构建中小型 React 项目的工作。其中包括营销网站、轻型电子商务和网络应用程序。
我们推荐用于重型电子商务或企业应用程序的其他框架。 Waku 是一种轻量级替代方案,为服务器组件时代带来有趣的开发人员体验。是的,让 React 开发再次变得有趣!
使用 Waku 启动一个新项目非常简单,您将获得一个使用 tailwind 设置的入门模板:
npm create waku@latest
涵盖了所有基本要求除了在使用变异服务器操作时在单个请求中返回客户端组件的更新之外。目前,任何服务器突变都需要在客户端组件中使用 router.reload() 刷新客户端路由器,这会导致向服务器发出第二个请求,以将更新后的数据作为 RSC 流加载。
以下可选要求仍在开发中:
支持许多部署目标:Vercel、Netlify、Cloudflare、PartyKit、Deno、AWS Lambda、NodeJS
基于捆绑的复杂性,请准备好在许多第三方库中出现问题:
https://github.com/dai-shi/waku/issues/423
由 Viktor Lázár 开发:
我创建了 @lazarv/react-server 因为我想通过 Vite ❤️ 使用 React 服务器组件和服务器操作。对于大多数小型应用程序来说,Next.js 太多、太重、太慢。我希望获得与使用 Node.js 运行简单 JavaScript 文件相同的体验。这个框架试图尽可能地不发表意见。你可能可以实现你想要的任何事情。唯一的限制是它将使用自己的 React 版本。您甚至不需要在项目中安装 React。这一切都包含在框架中。我希望您会喜欢使用这个框架,就像我喜欢创建它并使用它来创建本文档一样。 - 拉扎尔夫
使用这个框架学习 React 服务器组件是一件轻而易举的事!您只需要一个包含有效反应服务器组件并运行命令的文件:
./App.jsx
export default function App() { return <h1>Hello, World!</h1> }
npx @lazarv/react-server ./App.jsx
教程部分有一个关于如何入门的很好的文档和几个示例项目。
涵盖所有基本要求除了在使用变异服务器操作时在单个请求中返回客户端组件的更新。
由于运行时依赖于 NodeJS API,因此其他运行时例如目前不支持(AWS Lambda@Edge、Cloudflare)。
此外还存在以下功能:
部署目标:NodeJS、Vercel - 开发中的适配器:Netlify、Cloudflare、sst
支持开箱即用的 Tailwind CSS、TanStack 查询、Mantine UI、Material UI。
由汤姆·普雷斯顿-沃纳提供:
Redwood 是全栈 JavaScript 应用程序框架。
包括电池、后端、React、约定和意见。
仍在开发中并且仅适用于 Node v20 和 Yarn 4:
export default function App() { return <h1>Hello, World!</h1> }
然后您需要启用一些实验性功能:
npx @lazarv/react-server ./App.jsx
最后,构建并服务:
npx -y create-redwood-app@canary -y ~/rsc_app cd ~/rsc_app
作为 setup-rsc 命令的一部分,为您创建了一个准系统 RSC 应用程序,演示了服务器组件内部渲染的客户端组件
部署目标:Vercel、Netlify、Render、GCP 或 AWS(通过 Coherence)、AWS(通过 Flightcontrol)、NodeJS
Next.js | WAKU | React-server | RedwoodJS | |
---|---|---|---|---|
DEV-Environment / Bundling | Turbopack | Vite 5 | Vite 6 | Vite |
Rendering | SSR, ISR, SSG, CSR | SSR, SSG, CSR | SSR, SSG, CSR, Micro-Frontends | SSR, SSG, CSR |
Caching Layers | Yes | No | Yes | ?? |
Deployment Target | Vercel, NodeJS | Vercel, Netlify, Cloudflare, Deno, AWS Lambda, PartyKit, NodeJS | Vercel, NodeJS, sst (AWS Lambda) | Vercel, Netlify, AWS, NodeJS |
Community | Very Big | Tiny | Just Starting | Small |
Open Source Financing | Vercel | Donations | Donations | Privately Funded by a Rich Guy |
要点回顾:
尝试框架以找到最适合您的项目的框架。
以上是超越 Next.js:探索替代的 React 服务器组件框架的详细内容。更多信息请关注PHP中文网其他相关文章!