搜尋
首頁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 用戶端應用程式現有的優秀捆綁器進行轉錄和捆綁非常簡單。有多種選項可以執行此操作,最常用的選項之一是使用 ViteJ 作為開發伺服器和捆綁器。提供 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中替換字符串字符Mar 11, 2025 am 12:07 AM

JavaScript字符串替換方法詳解及常見問題解答 本文將探討兩種在JavaScript中替換字符串字符的方法:在JavaScript代碼內部替換和在網頁HTML內部替換。 在JavaScript代碼內部替換字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 該方法僅替換第一個匹配項。要替換所有匹配項,需使用正則表達式並添加全局標誌g: str = str.replace(/fi

自定義Google搜索API設置教程自定義Google搜索API設置教程Mar 04, 2025 am 01:06 AM

本教程向您展示瞭如何將自定義的Google搜索API集成到您的博客或網站中,提供了比標準WordPress主題搜索功能更精緻的搜索體驗。 令人驚訝的是簡單!您將能夠將搜索限制為Y

8令人驚嘆的jQuery頁面佈局插件8令人驚嘆的jQuery頁面佈局插件Mar 06, 2025 am 12:48 AM

利用輕鬆的網頁佈局:8 ESTISSEL插件jQuery大大簡化了網頁佈局。 本文重點介紹了簡化該過程的八個功能強大的JQuery插件,對於手動網站創建特別有用

構建您自己的Ajax Web應用程序構建您自己的Ajax Web應用程序Mar 09, 2025 am 12:11 AM

因此,在這裡,您準備好了解所有稱為Ajax的東西。但是,到底是什麼? AJAX一詞是指用於創建動態,交互式Web內容的一系列寬鬆的技術。 Ajax一詞,最初由Jesse J創造

什麼是這個&#x27;在JavaScript?什麼是這個&#x27;在JavaScript?Mar 04, 2025 am 01:15 AM

核心要點 JavaScript 中的 this 通常指代“擁有”該方法的對象,但具體取決於函數的調用方式。 沒有當前對象時,this 指代全局對象。在 Web 瀏覽器中,它由 window 表示。 調用函數時,this 保持全局對象;但調用對象構造函數或其任何方法時,this 指代對象的實例。 可以使用 call()、apply() 和 bind() 等方法更改 this 的上下文。這些方法使用給定的 this 值和參數調用函數。 JavaScript 是一門優秀的編程語言。幾年前,這句話可

10張移動秘籍用於移動開發10張移動秘籍用於移動開發Mar 05, 2025 am 12:43 AM

該帖子編寫了有用的作弊表,參考指南,快速食譜以及用於Android,BlackBerry和iPhone應用程序開發的代碼片段。 沒有開發人員應該沒有他們! 觸摸手勢參考指南(PDF)是Desig的寶貴資源

通過來源查看器提高您的jQuery知識通過來源查看器提高您的jQuery知識Mar 05, 2025 am 12:54 AM

jQuery是一個很棒的JavaScript框架。但是,與任何圖書館一樣,有時有必要在引擎蓋下發現發生了什麼。也許是因為您正在追踪一個錯誤,或者只是對jQuery如何實現特定UI感到好奇

如何創建和發布自己的JavaScript庫?如何創建和發布自己的JavaScript庫?Mar 18, 2025 pm 03:12 PM

文章討論了創建,發布和維護JavaScript庫,專注於計劃,開發,測試,文檔和促銷策略。

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脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

倉庫:如何復興隊友
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

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等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。