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

React.js / Next.js

Zustand + TanStack Query を組み合わせた実践的な使い方って、どんなものがあるのかな?

今回は、React.jsクライアント側(UI)の状態を管理する Zustand と、API から取得するサーバーデータを管理する TanStack Query(旧 React Query) を組み合わせた実践的な使い方をわかりやすく解説します。

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

Zustand とは?

Zustand について、下記に詳しく記載しましたので、ご確認ください。

TanStack Query(旧 React Query) とは?

TanStack Query(旧 React Query)について、下記に詳しく記載しましたので、ご確認ください。

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

Zustand + TanStack Query の構成

役割分担

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

  • Zustand
    フォームの入力値モーダルの開閉ダークモードのON/OFF などの クライアント(UI)の状態を管理 します。即時に変更される一時的な状態の管理に適しています。
  • TanStack Query
    ユーザー一覧データ投稿データ商品一覧データ などの、サーバーから取得したデータ(サーバーステート) を管理 します。データの取得・キャッシュ・再取得・ローディング管理 などを 自動で行ってくれます。

メリット

ZustandTanStack Query を組み合わせる最大のメリットは、サーバーデータの取得・キャッシュ・再取得は TanStack Query、クライアント(UI)の状態管理は Zustand と、それぞれの役割を明確に分離できる ことです。

その結果、状態の変更範囲が限定 され、不要な再レンダリングを防ぎやすく なります。さらに、パフォーマンスが向上し、保守性・可読性の高いコードを維持しやすく なります。

Zustand + TanStack Query のコード例

Store の作成 ※ Zustand(UI状態管理)

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

QueryClientProvider の設定 ※ TanStack Query(データ取得状態管理)

TanStack Query を使えるように、アプリ全体で QueryClient を設定する

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

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

  1. ユーザーをクリック
  2. Zustandが更新 され、Reactが再レンダリング される
  3. isModalOpen && selectedUser && (…)” の条件が true になり、モーダルが表示 される

ユーザー一覧取得 などの データ取得処理 : TanStack Query
選択中IDモーダル状態 などの UI状態 : Zustand


処理内容

  1. “画面をリロード(更新処理)
  2. 一瞬 “Loading…” の文字が表示され、複数のユーザー名がリスト表示 される
  3. ユーザーリスト から ユーザー名をクリック すると、ユーザー名の背景色が水色になりユーザーの詳細情報のモーダルが表示される
  4. 閉じる ボタンで、ユーザーリスト 画面に戻る
  5. また ユーザーリスト から 別な ユーザー名をクリック すると、別な ユーザー名の背景色が水色になりユーザーの詳細情報のモーダルが表示される

まとめ

ZustandTanStack Query を組み合わせた実践的な使い方について解説してきましたが、いかがでしたでしょうか?

Zustand は、フォームの入力値モーダルの開閉ダークモードのON/OFF などの クライアント(UI)の状態を管理 し、TanStack Query は、ユーザー一覧投稿データ商品一覧 などの サーバーから取得したデータ(サーバーステート) を管理 してくれます。

この 2 つを組み合わせることで、サーバーデータの取得・キャッシュ・再取得は TanStack Query、クライアント(UI)の状態管理は Zustand と、それぞれの役割を明確に分離する ことができます。

まずは小さな コンポーネント から実践し、ZustandTanStack Query を組み合わせながら、適切に使い分けられるようになっていきましょう。

公式サイト

Zustand

Zustand
🐻 Bear necessities for state management in React

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をコピーしました