0Pricing
React Academy · レッスン

データとコードの境界に使うSuspense

Suspenseを遅延ロードや将来のデータライブラリと組み合わせ、すっきりしたローディング状態を実現します。

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

ようこそ

このレッスンでは、コード分割のためにReact.lazyとReact Suspenseを、コンテンツの読み込み中にフォールバックUIを表示するためにデータライブラリと組み合わせて使います。

Suspenseとは

Suspenseは、そのサブツリー内で「サスペンド」している(何かの読み込みを待っている)コンポーネントを検出し、代わりにフォールバックUIをレンダリングするReactコンポーネントです。
<Suspense fallback={<Spinner />}>
  <MyComponent />
</Suspense>

React.lazyとSuspense

React.lazy()は、動的インポートから読み込まれるコンポーネントを作成します。Suspense内で使うと、JavaScriptバンドルのダウンロードが完了するまでフォールバックがレンダリングされます。
const HeavyChart = React.lazy(() => import('./HeavyChart'));

<Suspense fallback={<p>Loading chart...</p>}>
  <HeavyChart />
</Suspense>

1つの境界下に複数の遅延コンポーネントを置く

同じSuspense境界の下にある複数の遅延コンポーネントは、1つのフォールバックを共有します。Reactは、すべてのコンポーネントの読み込みが完了してからコンテンツを表示します。独立して読み込みたい場合は、境界をネストしてください。

Suspense境界のネスト

Suspense境界をネストすると、すべての読み込みを待つのではなく、UIの各部分を読み込みが完了した順に表示できます。外側の境界は遅い読み込みを受け持ち、内側の境界は速い読み込みを処理します。
<Suspense fallback={<PageSkeleton />}>
  <Header />
  <Suspense fallback={<ChartSkeleton />}>
    <LazyChart />
  </Suspense>
</Suspense>

データライブラリとSuspense

React Query(suspense: trueを指定した場合)やRelayなどのライブラリは、遅延読み込みと同じように、データを待っているコンポーネントをサスペンドさせます。Suspense境界がローディング時のフォールバックを提供します。
const { data } = useQuery({ queryKey: ['users'], queryFn: fetchUsers,
  suspense: true }); // component suspends until data is ready
// No loading check needed — data is always available here

React 19のuse()フック

React 19では、`use(promise)`フックを使ってコンポーネント内でpromiseを直接読み取れます。promiseが保留中の場合、コンポーネントはサスペンドし、最も近いSuspense境界がフォールバックを表示します。
import { use } from 'react';

function Profile({ userPromise }) {
  const user = use(userPromise); // suspends until resolved
  return <p>{user.name}</p>;
}

順序どおりに表示するSuspenseList

React.SuspenseList(実験的機能)は、複数のSuspense境界を調整し、特定の順序(上から下、すべて同時など)で表示します。これにより、UIが無秩序に飛び出すように表示されるのを防ぎます。

Suspenseはエラーを捕捉しません

Suspenseが処理するのはローディング状態だけです。失敗したfetchから発生したエラーは捕捉しません。ローディング状態とエラー状態の両方を処理するには、SuspenseとError Boundaryを組み合わせてください。
<ErrorBoundary fallback={<Error />}>
  <Suspense fallback={<Spinner />}>
    <DataComponent />
  </Suspense>
</ErrorBoundary>

フォールバックとしてのスケルトンスクリーン

スピナーの代わりに、Suspenseのフォールバックとしてスケルトンスクリーンを使ってください。スケルトンスクリーンはコンテンツの形状に合わせたプレースホルダーのレイアウトで、コンテンツが表示されたときのレイアウトシフトを抑えます。

理解度チェック

React.lazy()コンポーネントのバンドルがダウンロードされている間、ユーザーには何が表示されますか?

まとめ

Suspenseで読み込み中のコンポーネントをラップし、フォールバックを表示します。コード分割にはReact.lazyを、データの読み込みにはデータライブラリのSuspenseモードを使い、独立して段階的に表示するには境界をネストしてください。完全なエラー処理にはError Boundaryを組み合わせます。

コース修了

おめでとうございます!**Reactの非同期パターン:Promiseと並行処理**を修了しました。これで競合状態に対処し、useTransitionとuseDeferredValueを使って応答性の高いUIを実現し、Suspenseをローディング境界として活用できるようになりました。

よくある質問

「データとコードの境界に使うSuspense」レッスンは無料ですか?

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

「データとコードの境界に使うSuspense」で何を学びますか?

Suspenseを遅延ロードや将来のデータライブラリと組み合わせ、すっきりしたローディング状態を実現します。 ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「データとコードの境界に使うSuspense」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. 競合状態とEffectのクリーンアップ
  2. ブロッキングしないUI更新のためのuseTransition
  3. 入力のデバウンスに使うuseDeferredValue
  4. データとコードの境界に使うSuspense
← React Academyに戻る