Next.js 入門コース / レッスン 2

Server Components とデータ取得

デフォルトはサーバー

App Router のコンポーネントは既定で Server Component。サーバー側で実行されるため、async/await で直接データを取得でき、その分クライアントに送る JS が減ります。ボタンの onClick など対話が必要な部分だけ "use client" を宣言します。

app/courses/page.tsx(Server Component)

type Course = { id: number; name: string }; export default async function Courses() { const res = await fetch("https://api.example.com/courses", { next: { revalidate: 3600 }, // 1時間キャッシュ }); const courses: Course[] = await res.json(); return ( <ul> {courses.map((c) => <li key={c.id}>{c.name}</li>)} </ul> ); }

app/like-button.tsx(Client Component)

"use client"; import { useState } from "react"; export function LikeButton() { const [n, setN] = useState(0); return <button onClick={() => setN(n + 1)}>👍 {n}</button>; }

使い分けの目安

「データ表示はサーバー、操作はクライアント」が基本方針。まず全部 Server Component で書き、state やイベントが必要になった箇所だけを小さな Client Component に切り出すと、パフォーマンスの良い構成になります。

✅ 理解度チェック

useState を使うコンポーネントに必要な宣言は?