【React.js/Next.js】TanStack Query + Redux Toolkit 完全入門

React.js / Next.js

TanStack Query って、どんな機能があるのかな?

今回は、React.jsAPIからのデータ取得 をシンプルにしてくれるライブラリ TanStack Query(旧 React Query) について、基本的な考え方から実際の使い方、さらに Redux Toolkit と組み合わせた実践的なユースケース までをわかりやすく解説します。

React.js の環境構築がまだお済みでない場合は、下記より環境構築を行なってください。

TanStack Query(旧 React Query) とは?

TanStack Query(旧 React Query) とは、サーバーから取得したデータ(サーバーステート)を管理するための React.js ライブラリ のことで、API からデータを取得する ときに発生しがちな 読み込み中の表示エラー時の処理最新データの取得 といった処理を 自動で行ってくれます

そのため、useEffectuseState を使った複雑なコードを書かなくても、少ないコードで直感的かつ安全にデータ取得の処理を実装することができます。

TanStack Query のメリット

  • ローディング・エラー管理が簡単
    データ取得に必要な状態はすべて自動で管理されます。
  • キャッシュによる高速化
    一度取得したデータはキャッシュされるため、同じデータを使う画面では不要なAPI通信を減らせます。
  • 常に最新のデータを保てる
    画面の再表示やネットワーク復帰時など、適切なタイミングで自動的にデータを再取得してくれます。

TanStack Query のインストールと基本的な使い方

それでは、ここから実際に TanStack Queryインストール したり、コンポーネントで利用する 基本的な流れを見ていきましょう。

TanStack Query のインストール

TanStack Queryインストール します

TanStack Query 基本的な使い方

QueryClientProvider

TanStack Query を使うには、アプリ全体で QueryClient を設定する必要があります。

QueryClientデータ取得の設定やキャッシュを管理するためのオブジェクト のことで、 QueryClientProvider を使用することで、作成した QueryClient をアプリ全体にデータを提供することができます。

useQuery

useQuery を使うことで、APIからデータを取得する処理と状態管理 を一度に行うことができます。

useMutation

useMutationサーバーにデータを送る処理(POST / PUT / DELETEなど) を行うためのフックです。

invalidateQueries

invalidateQueries は 指定した queryKey に対応する Query 再取得 します。
その結果、 useQuery が持っている キャッシュ 最新のサーバーデータで更新 され、その useQuery が使用している コンポーネントも再レンダリング され、最新データが画面に反映 されます。

コード例

テスト用のAPI の為、「data.push({ id: data.length + 1, name });」で、ユーザーデータを手動で追加して、ユーザー一覧情報に表示
※通常は、「queryClient.invalidateQueries([‘users’]);」でコードのみで、キャッシュの更新とデータの再取得を自動で行ってくれる

処理内容

  1. 画面をリロード(更新処理)
  2. 一瞬 “Loading…” の文字が表示され、複数のユーザー名がリスト表示 される
  3. 入力欄に”テストユーザー“と入力して、”Add User”ボタンをクリックする
  4. 複数のユーザー名がリスト表示 に”テストユーザー“が追加され、ログにも”テストユーザー“が表示される

TanStack Query + Redux Toolkit と連携したユースケース

TanStack Query + Redux Toolkit の構成

役割分担

TanStack QueryRedux Toolkit を組み合わせる場合は、それぞれの役割を明確に分けることが重要です。

  • TanStack Query
    サーバー からの データ取得やキャッシュ管理、データの自動更新処理を管理 し、常に最新のデータ を扱います。
  • Redux Toolkit
    アプリ全体で共有 したい ログイン情報 や、選択中のデータなどのクライアント状態を管理します。
  • useMutation
    TanStack Query保持しているキャッシュを最新の状態に更新するためにPOST/PUT/DELETE などに使用します。
    Redux Toolkit の状態 サーバーのデータを同期させたい場合 にも 重要な役割 を持ちます。

メリット

この構成の メリット として、データ更新時の流れが次のように整理されます。

  1. API を呼び出してサーバー側のデータを更新 する
  2. useMutation() を使って TanStack Query のキャッシュを更新し、画面を即座に最新化 する
  3. Redux Toolkitdispatch して、アプリ全体の状態を更新 する

このように、「サーバー更新 → 画面更新 → Redux Toolkit 共有」という流れが明確になるため、状態管理 が複雑になりにくく、安全に実装できます。

TanStack Query + Redux Toolkit のコード例

Redux Toolkit について

Redux Toolkit について、下記の記事でも詳しく紹介している為、参考にしてみてください。

Slice の作成

ユーザー状態(データ)の初期値処理内容 を登録する

Store に Slice の登録・追加

上記の Slice を呼び出せるように、Store に登録する

Provider の設定

上記の Storeアプリ上状態管理 ができるように、QueryClient を囲むように Provider を設定する

データの取得・表示・更新

アプリ上 で、状態(データ)の取得・表示・更新 を確認する

処理内容

  1. “画面をリロード(更新処理)
  2. 一瞬 “Loading…” の文字が表示され、複数のユーザー名がリスト表示 される
  3. 入力欄に”テストユーザー“と入力して、”Add User”ボタンをクリックする
  4. 複数のユーザー名がリスト表示 に”test user“が追加され、ログにも”test user“が表示される
  5. +” ボタンをクリックし、”Counter” が “+1” ずつ カウントアップ される
  6. ” ボタンをクリックし、”Counter” が “-1” ずつ カウントダウン される

まとめ

TanStack Query(旧 React Query) について、useMutationRedux Toolkit とあわせて解説してきましたが、いかがでしたでしょうか?

TanStack Query は サーバーから取得したデータ(サーバーステート)を管理するための React.js ライブラリ のことで、API からの データ取得やキャッシュ管理、データの自動更新といった処理を管理 し、常に最新のデータ を扱えるようにしてくれます。

また サーバーデータを更新するために使用する useMutationPOST/PUT/DELETE など) や アプリ全体で共有 したい ログイン情報選択中のデータなどの状態を管理 してくれる Redux Toolkit を組み合わせることで、「サーバー更新 → 画面更新 → Redux Toolkit での共有」 という流れが明確になり、状態管理 が複雑になりにくく、安心して実装を進めることができます。

まずは TanStack Query の基本的な使い方をしっかり押さえ、小さな コンポーネント で試しながら、少しずつ useMutationRedux Toolkit を組み合わせて使えるようになっていきましょう。

公式サイト

TanStack Query

TanStack Query
Powerful asynchronous state management, server-state utilities and data fetching. Fetch, cache, update, and wrangle all ...
tachu × tachu

Laravel / React フルスタックエンジニア

Webエンジニア歴15年、フリーランス歴8年で、PHP / Laravel を中心に、
React.js / Vue.js を用いたフルスタックでのWeb開発をしています。

技術記事は Laravel / React / Web開発 を中心に書いています。

Webサービスの開発、既存システム改善、機能追加、技術相談、小規模な開発など、お気軽にご相談ください。

React.js / Next.js
シェアする

コメント

タイトルとURLをコピーしました