🌺

TanStack Query v5の useQuery (isPending, isFetching, isLoading)の使い分け

に公開

isFetching

  • 現在フェッチ処理が実行中(初回・再フェッチ問わず)

isPending

  • 単純に「データがあるかないか」だけを見る
  • 古いdataがある場合は、trueにならない
  • fetchingのstatusは関係なし

isLoading

  • 初回フェッチが実行中の状態
  • isPending && isFetching と同じ意味
  • クエリが無効化されていると false になる

enabled: false の場合

  • isPending: true(データがないから)
  • isLoading: false(フェッチしていないから)

実際の使い分けパターン

isPending

  • 初回ローディング画面(スピナー、スケルトン)
  • データが確実にない時の条件分岐

isFetching

  • 更新中インジケーター(小さなスピナー、プログレスバー)
  • フォームの送信ボタンを無効化
  • 「更新中」の視覚的フィードバック

isLoading

  • 初回フェッチ中かつ実際に通信している時のみ
  • enabled条件付きクエリで実際のローディング状態を知りたい時

どれを使うか困ったら

迷ったら、isFetchingを使うようにしています。
古いデータが表示されたまま、いきなりパッとデータが更新されると、ん?
という事が多々あったため。

fetch中にバックグラウンドでデータを更新、その間は、ユーザーに古いデータを見せておく、
等やりたい場合は、isPendingを使えばいいかなと。

enabledに関わらず、ローディング表示したいこともあるので、その時はisPendingがいいですね!

isLoadingは基本使わないかも、、

参考文献

https://tanstack.com/query/latest/docs/framework/react/reference/useQuery
https://zenn.dev/taisei_13046/books/133e9995b6aadf/viewer/c22ed5

宣伝

Next.jsを使ったフロントエンド開発などやってます。
お仕事のご依頼など、はこちらから!

https://www.htmlgo.site/

Discussion