0Pricing
React Academy · レッスン

RTK Query:Endpointsと自動キャッシュ

createApiでqueryとmutationのendpointsを定義し、RTK Queryにキャッシュ管理を任せます。

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

はじめに

このレッスンでは、RTK QueryのcreateApiでクエリーエンドポイントとミューテーションエンドポイントを定義し、キャッシュ、ローディング状態、データ取得を自動的に管理します。

RTK Queryとは

RTK Queryは、Redux Toolkitに組み込まれたデータ取得およびキャッシュのレイヤーです。手動でのローディング状態やエラー状態の管理をなくし、リクエストを重複排除し、エンドポイントと引数ごとにレスポンスをキャッシュします。

createApiによるAPIの作成

reducerPath、baseQuery、endpointsを指定してcreateApi()を呼び出します。戻り値には生成されたReactフックが含まれます。
import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';

export const userApi = createApi({
  reducerPath: 'userApi',
  baseQuery: fetchBaseQuery({ baseUrl: '/api' }),
  endpoints: (builder) => ({
    getUser: builder.query({ query: (id) => '/users/' + id }),
    getUsers: builder.query({ query: () => '/users' }),
  }),
});

export const { useGetUserQuery, useGetUsersQuery } = userApi;

APIのストアへの追加

生成されたリデューサーとミドルウェアをconfigureStoreに追加します。ミドルウェアがキャッシュのライフサイクル、無効化、再フェッチを処理します。
import { configureStore } from '@reduxjs/toolkit';
import { userApi } from './userApi';

export const store = configureStore({
  reducer: { [userApi.reducerPath]: userApi.reducer },
  middleware: (gDM) => gDM().concat(userApi.middleware),
});

クエリーフックの使用

コンポーネント内で生成されたフックを呼び出します。data、isLoading、isError、refetchが返されます。データは引数ごとにキャッシュされるため、同じ引数で同じフックを呼び出すと、キャッシュ済みのデータがすぐに返されます。
function UserCard({ id }) {
  const { data, isLoading, isError } = useGetUserQuery(id);
  if (isLoading) return <Spinner />;
  if (isError) return <p>Error</p>;
  return <p>{data.name}</p>;
}

自動的な重複排除

2つのコンポーネントが同時にマウントされ、useGetUsersQuery()を呼び出した場合、RTK Queryはネットワークリクエストを1回だけ送信し、両方のコンポーネントでレスポンスを共有します。

keepUnusedDataForによるキャッシュTTL

すべての購読者がアンマウントした後、キャッシュされたデータをストアに保持する期間を制御します。デフォルトは60秒です。エンドポイントごとに設定できます。
endpoints: (builder) => ({
  getUser: builder.query({
    query: id => '/users/' + id,
    keepUnusedDataFor: 300, // 5 minutes
  }),
})

ライブデータのポーリング

フックの呼び出しに`pollingInterval`を渡すと、Nミリ秒ごとに自動的に再フェッチします。ダッシュボードやライブフィードに便利です。
const { data } = useGetStatsQuery(undefined, {
  pollingInterval: 5000, // refetch every 5 seconds
});

クエリー引数とスキップ

クエリーを条件付きでスキップするには、undefinedを渡すか、`skip`オプションを使用します。必要なIDがまだ利用できない場合に便利です。
const { data } = useGetUserQuery(userId, { skip: !userId });

レスポンスの変換

キャッシュする前にAPIレスポンスの形を整えるには、`transformResponse`を使用します。コンポーネントは生のAPI形式ではなく、処理済みのデータ形式を受け取るため、コンポーネントをすっきり保てます。
getUsers: builder.query({
  query: () => '/users',
  transformResponse: (raw) => raw.data.users,
})

理解度チェック

2つのコンポーネントが同じタイミングで、同じ引数を使って同じRTK Queryフックを呼び出すと、どうなりますか?

まとめ

createApiはエンドポイントを定義し、型付きフックを生成します。リデューサーとミドルウェアをストアに追加します。クエリーフックはdata、isLoading、isErrorを返します。レスポンスは自動的にキャッシュされ、重複排除されます。

次のレッスン

次のレッスン:**楽観的更新とキャッシュの無効化** — ミューテーション時にUIをすぐ更新し、タグを使ってキャッシュ済みデータを無効化します。

よくある質問

「RTK Query:Endpointsと自動キャッシュ」レッスンは無料ですか?

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

「RTK Query:Endpointsと自動キャッシュ」で何を学びますか?

createApiでqueryとmutationのendpointsを定義し、RTK Queryにキャッシュ管理を任せます。 ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「RTK Query:Endpointsと自動キャッシュ」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. Redux ToolkitのSlicesとcreateSlice
  2. createAsyncThunkによる非同期ロジック
  3. RTK Query:Endpointsと自動キャッシュ
  4. Optimistic Updatesとキャッシュ無効化
← React Academyに戻る