0Pricing
React Academy · レッスン

ReactでのApollo Clientセットアップ

ApolloProviderを設定し、キャッシュとリンクチェーンを備えたApollo Clientを作成してGraphQL APIに接続します

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

Apollo Clientのインストール

@apollo/clientとgraphqlをインストールします。graphqlパッケージは、gqlテンプレートタグでクエリドキュメントを解析するためにApollo Clientが必要とするpeer依存関係です。

TypeScriptプロジェクトでは、どちらのパッケージにも独自の型定義が含まれているため、@typesパッケージは必要ありません。

ApolloClientインスタンスの作成

キャッシュとリンクを指定してApolloClientをインスタンス化します。最もシンプルな設定は、new ApolloClient({ cache: new InMemoryCache(), uri: '/graphql' }) です。uriの省略記法を使うと、内部でHttpLinkが作成されます。

より細かく制御する場合は、リンクチェーンを手動で構築し、uriではなくlinkオプションに渡します。

ApolloProvider

clientプロパティを指定したApolloProviderでReactアプリケーションをラップします: ApolloProvider client={client}。これにより、Reactコンテキストを介して、すべての子孫コンポーネントからApollo Clientインスタンスを利用できるようになります。

コンポーネントツリー内のすべてのuseQueryとuseMutationの呼び出しは、プロパティのバケツリレーなしで自動的にこのクライアントを使用します。

InMemoryCache: 正規化キャッシュ

InMemoryCacheはApollo Clientのデフォルトキャッシュです。取得したデータを型とIDで正規化し、各エンティティを一意のキャッシュキー(例: User:1)で保存します。いずれかのクエリがUser:1を取得すると、そのエンティティを後から読み取るすべての処理で更新されたデータを受け取れます。

この正規化により、1つのMutationでユーザーを更新すると、そのユーザーを含むすべてのクエリ結果が、追加のコードなしで自動的に更新されます。

HttpLink

HttpLinkは、Apollo ClientからGraphQLサーバーへのHTTPトランスポートを処理します。uriを指定し、必要に応じてfetch、headers、credentialsも設定します。

高度な用途では、リンクを分割して異なる操作を別々のエンドポイントにルーティングできます。SubscriptionはWebSocket(WebSocketLink)で、クエリとMutationはHTTP(HttpLink)で送信します。

setContextを使ったAuthLink

@apollo/client/link/contextからsetContextをインポートします。認証リンクを作成します: const authLink = setContext((_, { headers }) => ({ headers: { ...headers, authorization: 'Bearer ' + getToken() } }))。HttpLinkの前にチェーンします: authLink.concat(httpLink)。

setContextリンクは各リクエストの前に実行され、すべての操作に認証ヘッダーを動的に追加します。

リンクチェーンの構成

ApolloLink.from([authLink, errorLink, httpLink])またはauthLink.concat(httpLink)を使ってリンクを構成します。リンクはミドルウェアであり、それぞれのリンクが操作を処理してnext()に渡します。チェーンの最後のリンクが実際のHTTPリクエストを送信します。

一般的なチェーンは、auth link(ヘッダーを追加)+ error link(エラーを処理)+ HTTP link(リクエストを送信)です。

Apollo Linkのエラー処理

@apollo/client/link/errorからonErrorをインポートします。エラーリンクはGraphQLエラーとネットワークエラーをグローバルにインターセプトします。UNAUTHENTICATEDエラーが発生したときにログインページへリダイレクトしたり、ネットワーク障害時にグローバルなエラートーストを表示したりするために使用します。

エラーリンクはチェーン内でHTTPリンクより前に配置する必要がありますが、forward(operation)を呼び出してリクエストを再試行できます。

フェッチポリシーの選択肢

cache-first(デフォルト): キャッシュされたデータをすぐに返し、古い場合はバックグラウンドで再フェッチします。network-only: 常にサーバーから取得し、キャッシュを更新します。cache-and-network: キャッシュをすぐに返すと同時に取得も行い、レスポンスが到着したらUIを更新します。cache-only: キャッシュからのみ読み取り、キャッシュされていなければエラーにします。no-cache: 常に取得しますが、キャッシュには一切書き込みません。

データの鮮度要件に基づいて選択してください。ダッシュボードではcache-and-networkが、ユーザープロフィールのフォームではnetwork-onlyがよく使われます。

デフォルトのフェッチポリシーをグローバルに設定する

InMemoryCacheのdefaultOptionsでデフォルトのfetchPolicyを設定します: new ApolloClient({ defaultOptions: { watchQuery: { fetchPolicy: 'cache-and-network' } } })。個々のuseQuery呼び出しでは、クエリごとにこれを上書きできます。

適切なグローバルデフォルトを設定すると、すべてのフック呼び出しでfetchPolicyを指定する定型コードを減らせます。

Apollo Client DevTools

Apollo Client DevToolsのブラウザー拡張機能は、Chrome DevToolsにApolloパネルを追加します。キャッシュされたすべてのクエリと現在のデータを表示し、正規化キャッシュを調査できるほか、DevToolsパネルからクエリを再実行できます。

Chrome Web Storeからインストールし、devtools: { enabled: true }でクライアントを初期化します(開発モードではデフォルトで有効です)。

Apolloリンクチェーンの構成

チェックerrorLinkは、httpLinkとの相対的な位置関係でどこに配置すべきですか?

レッスンのまとめ

@apollo/clientとgraphqlをインストールし、InMemoryCacheとリンクチェーンを使ってApolloClientを作成し、ApolloProviderでアプリケーションをラップします。リンクチェーンは、authLink(トークンを追加)、errorLink(グローバルなエラー処理)、httpLink(HTTPトランスポート)で構成します。フェッチポリシーはキャッシュとネットワークのどちらを優先するかを制御し、InMemoryCacheは型とID(type+id)でエンティティを正規化します。

Apollo DevToolsのブラウザー拡張機能を使うと、キャッシュの調査とデバッグを簡単に行えます。

よくある質問

「ReactでのApollo Clientセットアップ」レッスンは無料ですか?

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

「ReactでのApollo Clientセットアップ」で何を学びますか?

ApolloProviderを設定し、キャッシュとリンクチェーンを備えたApollo Clientを作成してGraphQL APIに接続します ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「ReactでのApollo Clientセットアップ」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. React開発者のためのGraphQL基礎
  2. ReactでのApollo Clientセットアップ
  3. useQueryとuseMutationフック
  4. Apolloキャッシュ:正規化と更新
← React Academyに戻る