Site icon May's Notes

【Nextjs15學習筆記】React Server Components vs Client Components

You're importing a component that needs `useState`. This React hook only works in a client component. To fix, mark the file (or its parent) with the `"use client"` directive.

這個錯誤發生的原因是 React Server Components 和 Client Components 的區別:

  1. Server Components (預設) 不能使用 hooks、瀏覽器 API 等 client-side 功能
  2. useState 是 client-side hook,只能在 Client Components 使用
  3. 要使用 useState,需在檔案頂部加入 "use client" 指令,將組件標記為 Client Component
"use client"
import { useState } from 'react'

export default function Component() {
  const [state, setState] = useState()
  // ...
}

React 渲染方式的差異:Vanilla React vs. Next.js

當使用 Vanilla React 應用時,渲染是在 客戶端 進行的:

相對而言,Next.js 是一個全棧框架,不僅包括前端還涵蓋後端,因此程式碼也會在 伺服器端 執行:

默認情況下,Next.js 項目中的所有 React 組件(例如 pagelayout 等)都是在 伺服器端渲染 的。也就是說,Next.js 應用中的所有 React 組件默認都是伺服器端組件(RSCs)

Server vs Client Components

React Server Components (RSC)

Client Components

Exit mobile version