React Server Components 的誕生是為了進一步提升效能和使用者體驗,解決前端開發中的常見問題:
這些問題都有各自的解決方案,但 React Server Components 的引入,則提供了一個新的選擇。
Server Components 是在伺服器端生成 React 元件,然後將這些元件的輸出結果用一個特殊格式傳送到客戶端,用來產生 HTML。實際上運作會更複雜,這邊只是簡單的說明。
在 React 19 使用 Server Components 是穩定的,但 bundlers 和框架底層架構還是有機會改變,建議使用特定的 React 版本或使用 Canary 版本。
Server Components 的關鍵是使用 Async Component,透過 Async Component 可以在 render 的過程中使用 await
來取得資料。
使用範例如下:
export default async function Page() {
const res = await fetch("https://api.example.com/users");
const users = res.json();
return (
<>
<h1>Users</h1>
{users.map((user) => (
<div key={user.id}>
<h2>{user.name}</h2>
<p>{user.email}</p>
</div>
))}
</>
);
}
這也是除了之前介紹的 fetch 資料的方式外,另一種 Server Components 專屬的方式。
如果 Server Component 重新取得資料,並不會有任何閃爍的畫面。如果在資料抓取時需要顯示 loading 畫面,可以搭配 React 的 Suspense 進行處理。
雖然名稱相似,但 Server Components 和 Server Side Rendering 是兩個完全不同的概念。
兩者可以同時使用,也可以根據需求選擇。
Client Components 就是我們一般在 React 中最常用的 Component,負責處理使用者交互及瀏覽器特有的功能。
在 Server Component 沒有辦法使用以下內容:
這時候就需要使用 Client Component。
之後會介紹 Server Components 與 Client Components 的整合,有機會也會介紹到 Server Components 的內部運作原理。
參考資料:
https://www.youtube.com/watch?v=TQQPAU21ZUw
https://react.dev/reference/rsc/server-components
https://typeofnan.dev/what-is-the-difference-between-ssr-and-react-server-components/