0Pricing
React Academy · レッスン

React QueryとQueryClientのセットアップ

TanStack Queryをインストールし、QueryClientProviderでアプリをラップして、最初のuseQueryを実行します。

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

ようこそ

このレッスンでは、TanStack Query をインストールし、QueryClient と QueryClientProvider を設定して、最初の useQuery を実行し API からデータを取得します。

React Query とは

TanStack Query(旧称 React Query)は、リモートソースからのデータ取得、キャッシュ、同期、更新といったサーバー state を管理します。手動での loading/error state や useEffect を使ったデータ取得の代わりになります。

インストール

コアパッケージをインストールし、必要に応じて DevTools もインストールします。
npm install @tanstack/react-query
npm install @tanstack/react-query-devtools --save-dev

QueryClient の作成

すべてのキャッシュと設定を保持する QueryClient インスタンスを作成します。それをアプリをラップする QueryClientProvider に渡します。
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';

const queryClient = new QueryClient();

createRoot(document.getElementById('root')).render(
  <QueryClientProvider client={queryClient}>
    <App />
  </QueryClientProvider>
);

最初の useQuery

queryKey 配列とデータを返す queryFn を指定して useQuery を呼び出します。キーによってキャッシュされたエントリを一意に識別します。
import { useQuery } from '@tanstack/react-query';

function Posts() {
  const { data, isLoading, isError } = useQuery({
    queryKey: ['posts'],
    queryFn: () => fetch('/api/posts').then(r => r.json()),
  });

  if (isLoading) return <p>Loading...</p>;
  if (isError) return <p>Error!</p>;
  return <ul>{data.map(p => <li key={p.id}>{p.title}</li>)}</ul>;
}

Query Keys

Query key は配列です。キーにパラメーターを追加して、キャッシュエントリの対象を限定します。異なるキーには異なるキャッシュエントリが対応します。
// All posts
useQuery({ queryKey: ['posts'], queryFn: fetchPosts })

// Post with id 5
useQuery({ queryKey: ['posts', 5], queryFn: () => fetchPost(5) })

// Posts filtered by category
useQuery({ queryKey: ['posts', { category: 'react' }], queryFn: /* ... */ })

Query の状態

useQuery は複数の状態プロパティを返します:`isLoading`、`isFetching`、`isError`、`isSuccess`、`data`、`error`。バックグラウンドでの再取得中も `isFetching` は true になりますが、`isLoading` が true になるのは初回読み込み時だけです。

React Query DevTools

開発中に ReactQueryDevtools をアプリに追加すると、すべてのキャッシュエントリ、その状態、最後に取得された時刻を確認できます。デバッグに非常に役立ちます。
import { ReactQueryDevtools } from '@tanstack/react-query-devtools';

<QueryClientProvider client={queryClient}>
  <App />
  <ReactQueryDevtools initialIsOpen={false} />
</QueryClientProvider>

デフォルト設定

QueryClient で staleTime、gcTime(ガベージコレクション)、リトライ回数、refetchOnWindowFocus などのグローバルなデフォルト値を設定します。
const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      staleTime: 60_000,     // data is fresh for 60s
      retry: 2,              // retry failed queries twice
      refetchOnWindowFocus: false,
    },
  },
});

自動的な再取得

デフォルトでは、次のタイミングで React Query が stale なデータを再取得します:ウィンドウが再びフォーカスされたとき、コンポーネントが再マウントされたとき、ネットワークに再接続したとき。これらは各クエリで個別に設定できます。

確認問題

useQuery の queryKey 配列にはどのような目的がありますか?

まとめ

@tanstack/react-query をインストールし、QueryClient を作成して、QueryClientProvider でアプリをラップします。そのうえで、queryKey と queryFn を指定して useQuery を呼び出します。可視性を高めるには DevTools を追加します。グローバルなデフォルト値は QueryClient で設定します。

次に学ぶこと

次のレッスン:**Caching, Stale Time & Background Refetching** — staleTime と gcTime を設定し、データを再取得するタイミングを制御します。

よくある質問

「React QueryとQueryClientのセットアップ」レッスンは無料ですか?

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

「React QueryとQueryClientのセットアップ」で何を学びますか?

TanStack Queryをインストールし、QueryClientProviderでアプリをラップして、最初のuseQueryを実行します。 ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

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

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

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

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

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

  1. React QueryとQueryClientのセットアップ
  2. キャッシュ、Stale Time、バックグラウンド再取得
  3. useMutationによるMutation
  4. useInfiniteQueryによる無限スクロールとページネーション
← React Academyに戻る