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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- React開発者のためのGraphQL基礎
- ReactでのApollo Clientセットアップ
- useQueryとuseMutationフック
- Apolloキャッシュ:正規化と更新