0Pricing
React Academy · レッスン

React Server Componentsの基礎

RSCとは何か、client componentsとどう異なるか、どのように使い分けるかを理解します。

「React Server Componentsの基礎」はCoddyKit上の無料React Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。

はじめに

このレッスンでは、React Server Components(RSC)が何か、クライアントコンポーネントとどう異なるか、またそれぞれをいつ使うかを学びます。

2つのコンポーネントの世界

React 19とNext.js App Routerでは、コンポーネントが2つの世界に分かれます:**Server Components**(サーバーでレンダリングされ、インタラクティブ性を持たない)と**Client Components**(サーバーとクライアントの両方でレンダリングされ、状態とイベントハンドラーを持つ)です。

Server Componentsがデフォルト

Next.js App Routerでは、すべてのコンポーネントがデフォルトでServer Componentです。ファイルの先頭に'use client'を追加すると、Client Componentモードを選択できます。
// Server Component (default, no directive needed)
export default async function Page() {
  const data = await fetch('/api/posts').then(r => r.json());
  return <ul>{data.map(p => <li key={p.id}>{p.title}</li>)}</ul>;
}

Client Components

ファイルの先頭に'use client'を追加すると、Client Componentになります。Client Componentsでは、useState、useEffect、イベントハンドラー、ブラウザーAPIを使用できます。
'use client';
import { useState } from 'react';

export function Counter() {
  const [n, setN] = useState(0);
  return <button onClick={() => setN(n+1)}>{n}</button>;
}

Server Componentsでできること

Server Componentsでは、データベースクエリーをawaitし、ファイルシステムを読み取り、環境変数に含まれるシークレットにアクセスし、大規模なサーバー専用パッケージをインポートし、クライアントにJavaScriptを一切送信せずにレンダリングできます。
// Fetch from DB directly in the component!
import { db } from '@/lib/db';

export default async function UserList() {
  const users = await db.select().from(usersTable);
  return <ul>{users.map(u => <li key={u.id}>{u.name}</li>)}</ul>;
}

Server Componentsの制限

Server Componentsでは、useState、useEffect、イベントハンドラー(onClickなど)、ブラウザーAPI(window、localStorage)、Contextは使用できません。これらには'use client'が必要です。

Server ComponentsとClient Componentsの組み合わせ

一般的なパターンは、Server Componentがデータを取得し、propsとしてClient Componentに渡す方法です。サーバーがデータを処理し、クライアントがインタラクションを処理します。
// Server Component
export default async function Page() {
  const user = await getUser();
  return <ProfileEditor user={user} />; // client component
}

// Client Component (separate file)
'use client';
export function ProfileEditor({ user }) {
  const [name, setName] = useState(user.name);
  return <input value={name} onChange={e => setName(e.target.value)} />;
}

クライアント境界のルール

ファイルに'use client'を指定すると、そのファイルがインポートするコンポーネントもすべてクライアントコンポーネントとして扱われます。サーバーとクライアントの境界はファイル単位で設定されます。

Server ComponentsではJavaScriptゼロ

Server Componentsはサーバー上でHTMLにレンダリングされます。コンポーネントのコードがブラウザーに送信されることは一切ありません。これにより、JavaScriptバンドルのサイズを大幅に削減できます。

Server ComponentsとSSRの違い

従来のSSRはページ全体をHTMLにレンダリングしますが、ハイドレーションのためにすべてのコンポーネントコードをクライアントに送信します。Server Componentsはコードをクライアントにまったく送信せず、レンダリング結果だけを送信します。

理解度チェック

Next.js App RouterでReact Client Componentにするには、ファイルにどのディレクティブを追加しますか?

まとめ

Server Componentsはサーバー上で実行され、データベースやシークレットにアクセスでき、クライアントにJSを送信しません。Client Componentsでは'use client'を追加し、状態、エフェクト、イベントハンドラーを使用できます。両者を組み合わせ、サーバーでデータを取得し、クライアントでインタラクションを処理します。

次のレッスン

次のレッスン:**非同期リソースのためのuse()フック** — React 19のuse()フックを使って、レンダリング中にPromiseとコンテキストを読み取ります。

よくある質問

「React Server Componentsの基礎」レッスンは無料ですか?

はい。「React Server Componentsの基礎」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。

「React Server Componentsの基礎」で何を学びますか?

RSCとは何か、client componentsとどう異なるか、どのように使い分けるかを理解します。 ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

React Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「React Server Componentsの基礎」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このReact Academyレッスンでコードを書いて実行できますか?

はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. React Server Componentsの基礎
  2. 非同期リソースのためのuse() Hook
  3. React ActionsとuseActionState
  4. 即時フィードバックのためのuseOptimistic
← React Academyに戻る