Reactアプリケーションにおける状態管理 - 適切なツールの選択
•4 min read 分で読める
ReactWeb
はじめに
状態管理は、Reactアプリケーションを構築する上で最も重要な側面の1つです。アプリケーションが複雑になるにつれて、適切な状態管理ソリューションを選択することがますます重要になります。React Queryを6ヶ月間本番環境で使用した後、React QueryとReduxをいつ使用すべきかについての洞察を共有したいと思います。
サーバー状態とクライアント状態の理解
比較に入る前に、サーバー状態とクライアント状態の違いを理解することが重要です:
サーバー状態:
- 外部ソース(API、データベース)から発生するデータ
- フェッチと更新に非同期APIが必要
- 制御できない真実の源がある
- 定期的に更新しないと古くなる可能性がある
クライアント状態:
- アプリケーション内で完全に管理されるデータ
- 同期的で即座に利用可能
- あなたが真実の源
- 例:UI状態、ユーザー設定、フォームデータ
React Query:サーバー状態のチャンピオン
React Queryはサーバー状態の管理に優れています:
自動キャッシング
const { data, isLoading } = useQuery(['users'], fetchUsers);
React Queryはデータを自動的にキャッシュし、キャッシュの無効化をインテリジェントに処理します。
バックグラウンド再フェッチ
React Queryは以下の場合にバックグラウンドで再フェッチしてデータを新鮮に保ちます:
- ウィンドウがフォーカスを取り戻したとき
- ネットワークが再接続されたとき
- クエリがマウントされたとき
Redux:クライアント状態マネージャー
Reduxは複雑なクライアント側の状態に対しては依然として価値があります:
Reduxを使用するとき
- 多くのコンポーネントが必要とする複雑なUI状態
- サーバーからではない状態
- タイムトラベルデバッグが必要なとき
- 複雑な状態更新ロジックがあるとき
私の推奨
React Queryを6ヶ月間本番環境で使用した後の推奨:
- サーバー状態にはReact Queryを使用 - API呼び出し、データフェッチ、キャッシング
- シンプルなクライアント状態にはReact ContextまたはZustandを使用 - テーマ、ユーザー設定
- 本当に複雑なクライアント状態がある場合のみReduxを使用 - 複数ステップのフォーム、複雑なUIワークフロー
サーバー状態用のReact Queryとクライアント状態用の軽量ソリューションの組み合わせにより、コードベースが大幅に簡素化され、ボイラープレートが50%以上削減されました。
結論
重要な洞察は、サーバー状態とクライアント状態は根本的に異なり、異なるツールで管理すべきであるということです。React Queryは外部データを含むすべてのものに私のお気に入りになり、ローカルUI状態にはより簡単なソリューションを維持しています。