React/API連携/Lesson 16
React Queryでサーバー状態を管理する
40分·theory
このチャプター
2/2
TypeScript
React Queryでサーバー状態を管理する
💡 なぜ学ぶべきか?
🎯
サーバーデータのキャッシングと同期を自動で処理し、コード量を70%削減します。
💼
バックグラウンドでの再検証により、常に最新データを保ちながらUXを向上させます。
⚡
エラー処理、リトライ、ローディング状態の管理が宣言的にシンプルになります。
🔗
大規模サービス(Karrot Market、Tossなど)で必須の技術です。
🏢 실무에서는
実務では、商品一覧を取得する際にReact Queryが自動でキャッシングを行い、ユーザーが別のページへ移動して戻ってきても、キャッシュされたデータを即座に表示できます。また、5分ごとにバックグラウンドで自動更新され、常に最新の価格が維持されます。
概念
React Queryは、サーバー状態のキャッシング、同期、再検証を自動化するライブラリです。fetchコードやローディング・エラー状態管理の繰り返しを劇的に削減できます。
なぜ重要なのか
サーバー状態管理の70%をReact Queryが自動処理します。キャッシング、バックグラウンド再検証、楽観的更新、無限スクロールを宣言的に実装できます。
コアコンセプト
React Query コアコンセプト
クエリ状態マシン
主な設定
キャッシュキー設計の原則
バックグラウンド再検証(stale-while-revalidate)
1. キャッシュされたデータを即座に返す(高速レスポンス)
2. バックグラウンドで新しいデータをフェッチ
3. 新しいデータが届いたらUIを更新
→ ユーザーは空白画面ではなく、直ちに前のデータを見られる
キーポイント
- ▸stale-while-revalidate: キャッシュを即時返却 + バックグラウンド再検証
- ▸クエリキー: 階層的な設計で関連キャッシュを一括無効化
- ▸useMutation + onMutate: 楽観的更新でUXを向上
- ▸useInfiniteQuery: 無限スクロールを宣言的に実装
💡 ⚠️ よくある間違い
- ▸queryKeyを単一の文字列だけで使う — 配列形式で階層化しないと関連キャッシュの一括無効化ができない
- ▸staleTime/cacheTimeを設定しない — デフォルト値ではフォーカスのたびに再リクエストが発生する。データの特性に合わせて調整すること
- ▸useMutation後にinvalidateQueriesを忘れる — リストに新しい項目が反映されない。onSuccessで関連クエリの無効化を必ず行うこと
- ▸queryFn内でエラーをキャッチして処理する — React Queryがエラー状態として扱うにはthrowが必要。catchした後に再throwすること
💡 🎯 面接対策
Q: React QueryとReduxの違いは何ですか?
Q: staleTimeとcacheTimeの違いを説明してください
Q: 楽観的更新はどのように実装しますか?
ヒント: Reduxはクライアント状態全体を管理しますが、React Queryはサーバー状態に特化してキャッシング・再検証・同期を自動化します。staleTimeはデータを「新鮮」とみなす期間(再リクエストしない)で、cacheTimeは非アクティブなキャッシュをメモリに保持する期間です。楽観的更新は、onMutateでsetQueryDataを使ってUIを先に変更し、エラー時はonErrorで以前のデータにロールバック、onSettledでサーバーデータと再同期します。
⚛️ React パターン — React Queryでサーバー状態を管理する
React QueryによるサーバーState管理を、コード例とともにステップごとに学びましょう。
1
🧩
1. React Queryによるサーバー状態管理の使用シナリオ
この機能が必要な場面。
↓
2
💻
2. コードを書く
React Queryによるサーバー状態管理の基本的な使い方。
↓
3
🎨
3. レンダリング結果
ユーザーが見る画面。
↓
4
💡
4. 実践的なヒント
よくある落とし穴とベストプラクティス。
🎮 React Queryでサーバー状態を管理する — ステップごとの理解
各ステップをクリックして内容を読み、✓ 理解しましたボタンで進捗を確認してください。
🖥️ 実行結果 — レンダリングされたReactコンポーネント
✏️ React 코드 수정하기 (클릭해서 열기)
⚛️ React 18 + Babel Standalone — まず結果を確認し、エディタで自由に編集できます。
確認クイズ
React Queryのコア機能ではないものはどれですか?
先に読むとよい概念: データフェッチング
次のおすすめ: Zustand — 今日のトップティアグローバルステート