React Queryを使いこなすために試したこと

69857 ワード

はじめに

タイトルで大きくふろしきを広げてしまいましたが、結論から言うといろいろと試してみた結果、現時点ではまだ着地点を見出せていません。現時点での自分なりの最適解として、useQueryusePrefetchuseMutationと楽観的更新の実装例についていくつか紹介させていただきます。

モチベーション

現在、Redux Sagaをふんだんに利用したアプリケーションのメンテナンス・機能拡張に携わっているのですが、ページ数やAPIエンドポイントが多数あることからコード量が多く構造も複雑になっており、メンテナンスコストの増大が懸念されるようになってきました。そこで今後のメンテナンス性の向上、また新規に参画するメンバーにも入りやすいようRedux SagaをはがしReact Queryへ少しずつ移行してくための検証を兼ねてReact Queryの使い方を探っています。

React Query

React Queryはデータの取得やキャッシュを用いた状態の管理を便利に行える多機能なライブラリです。一般的な使い方としては以下のように他のQuery系?ライブラリ(SWRやRTK Query,apollo client)と同じように、useEffectを利用しなくてもコロケーションを意識した実装ができます。実装する箇所によってはこのままでも十分実用的ですが、アプリケーションの規模が大きくなるとカスタムフック化するなど抽象化が必要になってくるでしょう。

React Queryの基本的な使用例
const { data, isError, isLoading } = useQuery(['tasks'], getTasks)

if(isLoading) return <div>Loading...</div>
if(isError) return <div>Error</div>

return (
  <ul>
    {!!data && data.map(item => <li key={item.id}>{item.title}</div>)}
  </ul>
)