自 React 誕生以來,它一直堅持一個核心理念:UI = f(state)。這個公式簡單直接,卻徹底改變了前端開發的方式,也帶動了整個生態的成長。回頭看 React 的發展,大致可以分成兩個階段:
而如今,React 正迎來可能是 第三代形態 —— React Server Components(RSC)。
這次不只是語法糖或 API 的改進,而是一次架構層面的升級。
它的雛形最早可以追溯到 2020 年,Meta 團隊提出了一個設想:
把組件模型擴展到網路邊界,讓伺服器和客戶端的職責劃分更自然。
不過,Meta 本身並沒有動力獨立推進這樣龐大的工程。自 2021 年起,Vercel 承擔起了主要的推動角色:
到了 2025 年,除了 Next.js,Parcel、Vite 插件、React Router 等也陸續加入支持,RSC 生態正在發芽。
RSC 的核心理念,是把組件劃分為兩類:
通過分層執行,實現高效渲染和職責清晰的分工。
onClick
)。.server.js
或 .server.tsx
。useState
、useEffect
)、實現動畫等動態邏輯。'use client'
指令。.client.js
或 .client.tsx
作為檔案後綴。React Server Components 帶來了一種全新的渲染思路,它不是簡單的伺服器端渲染(SSR),也不是傳統的客戶端渲染,而是把兩者融合在了一起。
首先,組件在伺服器上運行。伺服器組件可以直接在伺服器執行資料請求,比如讀取資料庫或檔案系統。React 會把組件樹“壓縮”成一種叫 Flight 協議 的特殊 JSON 描述,再把它傳遞給客戶端。
接下來是 流式傳輸。伺服器生成資料的同時就能一點點發送過來,瀏覽器收到一部分就能先渲染一部分。如果某些組件還沒準備好,React 可以配合 Suspense
展示友好的佔位界面,讓頁面不會“卡死”。
到了客戶端,React 會把收到的 Flight 資料和本地的 客戶端組件 拼接在一起。伺服器組件負責生成最終的 UI 結構,而客戶端組件則負責事件綁定、狀態管理等互動邏輯,這個過程叫做 客戶端協調。
這種模式的一個最大好處就是 資料擷取變得極其簡單。因為伺服器組件直接運行在伺服器,它們可以直接調用資料庫,不再需要額外的 API 層或複雜的資料請求邏輯。
RSC vs SSR:
getServerSideProps
的資料獲取邏輯。目前,Next.js App Router 是最成熟的落地方案。
// app/page.js —— 伺服器組件
import db from '@/lib/db';
import ClientCounter from './ClientCounter';
export default async function Page() {
const posts = await db.getPosts();
return (
<div>
<h1>部落格</h1>
<ul>
{posts.map(p => <li key={p.id}>{p.title}</li>)}
</ul>
<ClientCounter />
</div>
);
}
// app/ClientCounter.js —— 客戶端組件
'use client';
import { useState } from 'react';
export default function ClientCounter() {
const [count, setCount] = useState(0);
return <button onClick={() => setCount(c => c + 1)}>計數: {count}</button>;
}
特點:
Page
是伺服器組件,直接讀資料庫。ClientCounter
是客戶端組件,負責互動。use
hook、伺服器操作等配套能力。如果說 Class 組件 開啟了 React 的第一代,Hooks 定義了第二代,那麼 React Server Components 很可能就是 第三代 React。
它不僅提升了性能和開發體驗,更在潛移默化中,重塑了前後端的分工方式。
雖然目前生態還在早期,但隨著 Next.js、Vite、React Router 等的跟進,RSC 正在成為 React 的新常態。
未來的 React 應用,不再只是單純的“前端框架”,而是更自然的 全棧開發模型。