搜索
首页web前端js教程超越 Next.js:探索替代的 React 服务器组件框架

Beyond Next.js: Exploring Alternative React Server Component Frameworks

React Server Components (RSC) 目前的进展如何?

当 2020 年底 React 团队引入“零捆绑大小 React 服务器组件”概念时,许多人一直并且仍然难以理解它。现有框架都不支持新概念,原型也没有提供构建现实世界应用程序的可用基础。

现在,四年多过去了,所需的 React 版本仍处于测试阶段,尚未发布到生产环境,并且支持它的唯一大型知名框架由前 React 团队成员组成。对于少数试图提供基于 RSC 的替代框架的开发人员来说,这是一个非常悲伤的情况。

为什么我需要 RSC?

普通的 React 是一个仅专注于提供快速声明性解决方案来在浏览器中构建应用程序的库。浏览器中的应用程序始终需要服务器来获取和存储其状态。基于这一事实,大量的解决方案被开发出来并存在于 React 客户端生态系统中。当越来越多的人开始使用 Typescript 创建后端时,下一个趋势是带有类型化接口的 RPC 的复兴,它在后台创建了 api 端点。

查看 RSC 的这些要求,很快就会发现所有这些都在 RSC 的范围内,因为它们提供:

  • 可以返回类型化值和承诺的类型化服务器操作
  • 单个服务器请求更改服务器上的数据并更新客户端 UI
  • 在服务器上渲染组件,并且仅将序列化的渲染树流式传输到支持乱序渲染的客户端

这允许应用程序开发人员使用 React 来定义所有组件,无论它们是在客户端还是服务器上渲染。这种集成环境降低了现代应用程序的复杂性,并消除了后端和前端中重复的业务逻辑的冗余。

哪些框架支持 RSC?

由于 React 库仍是官方测试版,因此它们都不应该被视为生产就绪:

  • Next.js v15
  • 哇库
  • 反应服务器
  • RedwoodJS v9 - 仍在开发中

目前只有 Next.js 在某种程度上可用于生产。他们的版本 15 是 RSC 的第四次迭代,从 2021 年底开始发布版本 12。

除了列出的框架之外,这里还有一些存储库,其中包含构建 RSC 框架的蓝图 - 如果您想了解更多有关内部结构的信息,请使用它们:

  • 文熙
  • 双倍
  • 科特坎
  • r19

如果您了解更多框架,请在评论中提供它们的链接。

是什么让 RSC 难以在框架中实现?

基于 React 客户端应用程序现有的优秀捆绑器进行转录和捆绑非常简单。有多种选项可以执行此操作,最常用的选项之一是使用 ViteJs 作为开发服务器和捆绑器。提供 JavaScript 前端和后端堆栈的框架仍然必须提供自己的解决方案来处理开发和生产中的打字稿和捆绑。

使用 RSC,捆绑器需要处理至少三个转录和捆绑管道:

  1. 浏览器客户端
  2. SSR 服务器
  3. RSC 组件渲染器和灭菌 API
  4. 可选中间件

在 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 标准化之前,为一个框架开发的服务器和客户端组件将需要更改以与另一个框架一起使用。

真正的 RSC 框架的所有要求

  • React 服务器组件
    • 没有服务器的服务器组件
    • 带有服务器的服务器组件
    • 异步组件与服务器组件
  • 服务器操作
    • 从服务器组件创建服务器操作
    • 从客户端组件导入服务器操作
    • 用动作组合服务器动作
    • 带有服务器操作的表单操作
    • 使用 useActionState 的服务器操作
    • 使用 useActionState 进行渐进增强
    • 对服务器的单个请求,响应中包含 UI 的更新数据
  • 指令
    • “使用客户端”可让您标记在客户端上运行的代码。
    • 'use server' 标记可以从客户端代码调用的服务器端函数。
  • 捆绑 DEV 和 PROD 中的所有三个目标
  • 客户端路由 API
  • 服务器端路由API

有关 React Server 组件的更多详细信息可以在 React 官方文档中找到。

元框架的可选要求:

  • 服务器端渲染(SSR)
  • 静态站点生成 (SSG)
  • 嵌套布局
  • 流媒体
  • 文件系统路由器
  • 非 React API 端点
  • 中间件
  • 多个部署目标
  • 支持边缘运行时(AWS Lambda@Edge、Cloudflare)

Next.js - 为什么要寻找替代选项?

事实上,Next.js 15 是最主流的 RSC 框架,为什么我需要考虑替代框架?

这样做的原因始终基于要达到的目标,但我会尝试列出一些考虑其他选项有意义的原因:

  1. Next.js 是一个复杂的框架,它试图涵盖许多可能与给定项目不相关的不同用例
  2. 基于所有提供的功能的复杂性和使用情况,除 Vercel 之外的其他云环境的部署不受官方支持,并且需要付出巨大的努力才能与每个次要版本和主要版本的托管要求发生的变化保持同步。
  3. 直到版本 15 将捆绑程序更改为 Turbopack,开发体验缓慢且迟缓

请记住,本文仅关注提供 RSC 的替代方案,但还有更多框架提供与 RSC 几乎相似的功能,并且可能是比本文列出的 RSC 框架更好的替代方案。

Waku - 最小的 React 框架

由加藤大师开发:

Waku (wah-ku) 或わく在日语中的意思是“框架”。作为最小的 React 框架,它旨在加速初创公司和机构的开发人员构建中小型 React 项目的工作。其中包括营销网站、轻型电子商务和网络应用程序。

我们推荐用于重型电子商务或企业应用程序的其他框架。 Waku 是一种轻量级替代方案,为服务器组件时代带来有趣的开发人员体验。是的,让 React 开发再次变得有趣!

使用 Waku 启动一个新项目非常简单,您将获得一个使用 tailwind 设置的入门模板:
npm create waku@latest

涵盖了所有基本要求除了在使用变异服务器操作时在单个请求中返回客户端组件的更新之外。目前,任何服务器突变都需要在客户端组件中使用 router.reload() 刷新客户端路由器,这会导致向服务器发出第二个请求,以将更新后的数据作为 RSC 流加载。

以下可选要求仍在开发中:

  • 嵌套文件系统路由
  • 非 React API 端点

支持许多部署目标:Vercel、Netlify、Cloudflare、PartyKit、Deno、AWS Lambda、NodeJS

基于捆绑的复杂性,请准备好在许多第三方库中出现问题:
https://github.com/dai-shi/waku/issues/423

@lazarv/react-server - 使用服务器端渲染构建 React 应用程序的最简单方法

由 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 id="Hello-World">Hello, World!</h1>
}
npx @lazarv/react-server ./App.jsx

教程部分有一个关于如何入门的很好的文档和几个示例项目。

涵盖所有基本要求除了在使用变异服务器操作时在单个请求中返回客户端组件的更新

由于运行时依赖于 NodeJS API,因此其他运行时例如目前不支持(AWS Lambda@Edge、Cloudflare)。

此外还存在以下功能:

  • 访问服务器组件和操作中的 HTTP 上下文
  • 缓存任何服务器数据和服务器响应,并根据关键订单标签重新验证
  • 错误处理
  • 部分预渲染 - 将 JSX 页面的一部分定义为静态 shell
  • NodeJS 集群模式
  • 微前端 - 将您的应用程序分成更小、更易于管理的部分。使用 RemoteComponent 组件从远程 URL 加载微前端,并使用服务器端渲染在您的应用程序中渲染它

部署目标:NodeJS、Vercel - 开发中的适配器:Netlify、Cloudflare、sst

支持开箱即用的 Tailwind CSS、TanStack 查询、Mantine UI、Material UI。

RedwoodJS - 有效的单一开发框架

由汤姆·普雷斯顿-沃纳提供:

Redwood 是全栈 JavaScript 应用程序框架。
包括电池、后端、React、约定和意见。

仍在开发中并且仅适用于 Node v20 和 Yarn 4:

export default function App() {
  return <h1 id="Hello-World">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 与替代方案

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

结论

要点回顾:

  • RSC 为现代 Web 开发提供了强大的范例。
  • Next.js 很优秀,但不是唯一的选择。
  • 替代方案提供了满足不同需求的多种功能,但错过了单一请求突变 UI 更新。
  • React 生态系统中的图书馆尚未准备好拥抱 RSC

尝试框架以找到最适合您的项目的框架。

以上是超越 Next.js:探索替代的 React 服务器组件框架的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
JavaScript框架:为现代网络开发提供动力JavaScript框架:为现代网络开发提供动力May 02, 2025 am 12:04 AM

JavaScript框架的强大之处在于简化开发、提升用户体验和应用性能。选择框架时应考虑:1.项目规模和复杂度,2.团队经验,3.生态系统和社区支持。

JavaScript,C和浏览器之间的关系JavaScript,C和浏览器之间的关系May 01, 2025 am 12:06 AM

引言我知道你可能会觉得奇怪,JavaScript、C 和浏览器之间到底有什么关系?它们之间看似毫无关联,但实际上,它们在现代网络开发中扮演着非常重要的角色。今天我们就来深入探讨一下这三者之间的紧密联系。通过这篇文章,你将了解到JavaScript如何在浏览器中运行,C 在浏览器引擎中的作用,以及它们如何共同推动网页的渲染和交互。JavaScript与浏览器的关系我们都知道,JavaScript是前端开发的核心语言,它直接在浏览器中运行,让网页变得生动有趣。你是否曾经想过,为什么JavaScr

node.js流带打字稿node.js流带打字稿Apr 30, 2025 am 08:22 AM

Node.js擅长于高效I/O,这在很大程度上要归功于流。 流媒体汇总处理数据,避免内存过载 - 大型文件,网络任务和实时应用程序的理想。将流与打字稿的类型安全结合起来创建POWE

Python vs. JavaScript:性能和效率注意事项Python vs. JavaScript:性能和效率注意事项Apr 30, 2025 am 12:08 AM

Python和JavaScript在性能和效率方面的差异主要体现在:1)Python作为解释型语言,运行速度较慢,但开发效率高,适合快速原型开发;2)JavaScript在浏览器中受限于单线程,但在Node.js中可利用多线程和异步I/O提升性能,两者在实际项目中各有优势。

JavaScript的起源:探索其实施语言JavaScript的起源:探索其实施语言Apr 29, 2025 am 12:51 AM

JavaScript起源于1995年,由布兰登·艾克创造,实现语言为C语言。1.C语言为JavaScript提供了高性能和系统级编程能力。2.JavaScript的内存管理和性能优化依赖于C语言。3.C语言的跨平台特性帮助JavaScript在不同操作系统上高效运行。

幕后:什么语言能力JavaScript?幕后:什么语言能力JavaScript?Apr 28, 2025 am 12:01 AM

JavaScript在浏览器和Node.js环境中运行,依赖JavaScript引擎解析和执行代码。1)解析阶段生成抽象语法树(AST);2)编译阶段将AST转换为字节码或机器码;3)执行阶段执行编译后的代码。

Python和JavaScript的未来:趋势和预测Python和JavaScript的未来:趋势和预测Apr 27, 2025 am 12:21 AM

Python和JavaScript的未来趋势包括:1.Python将巩固在科学计算和AI领域的地位,2.JavaScript将推动Web技术发展,3.跨平台开发将成为热门,4.性能优化将是重点。两者都将继续在各自领域扩展应用场景,并在性能上有更多突破。

Python vs. JavaScript:开发环境和工具Python vs. JavaScript:开发环境和工具Apr 26, 2025 am 12:09 AM

Python和JavaScript在开发环境上的选择都很重要。1)Python的开发环境包括PyCharm、JupyterNotebook和Anaconda,适合数据科学和快速原型开发。2)JavaScript的开发环境包括Node.js、VSCode和Webpack,适用于前端和后端开发。根据项目需求选择合适的工具可以提高开发效率和项目成功率。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。