</>
⌕
Junior #server-components#client-components#app-router

Server Component và Client Component trong Next.js App Router khác nhau thế nào?

⚡ Trả lời nhanh

Trong App Router, mọi component mặc định là Server Component: chạy trên server, không gửi JS của nó xuống client, truy cập được DB/secret. Client Component (khai báo 'use client') dùng được state, effect, event handler và browser API, và được hydrate ở client.

Server ComponentClient Component
Khai báomặc định'use client' ở đầu file
Chạy ởserver (build hoặc request)server (prerender HTML) rồi hydrate ở client
useState, useEffect, onClickKhôngCó
Truy cập DB, secret, fsCóKhông
JS gửi xuống browserKhôngCó
// app/page.tsx (Server Component, có thể async)
import Counter from "./counter";

export default async function Page() {
  const posts = await db.post.findMany();
  return <Counter initial={posts.length} />;
}

// app/counter.tsx
"use client";
import { useState } from "react";
export default function Counter({ initial }: { initial: number }) {
  const [n, setN] = useState(initial);
  return <button onClick={() => setN(n + 1)}>{n}</button>;
}
🃏 Ôn bằng flashcard