HRBrain Fly High #4 -Frontend-にて使用した資料
React Queryは非同期の状態管理ライブラリだHRBrain 長期インターン 安井大晟
View Slide
自己紹介01. 02. 03.04. 05.状態管理の種類 Client StatevsServer State非同期の状態を管理するキャッシュを管理するTable of contents
自己紹介01.
経歴2019年 早稲田大学教育学部入学2021年 42Tokyo入学 プログラミングを始める2022年 技育展優秀賞2022年 HRBrain長期インターン開始2023年 春のJavaScript祭りLT登壇2023年 社内Qiita Engineer Festa運営中
02.状態管理の種類
Reactの状態には何種類ある?ReduxContext APIRecoiljotaiuseState React QuerySWR
A.3種類
株式会社ナレッジワークよしこさんの記事をお借りします
Client State Global State Server StateReactの状態には3種類ある各Component内で管理される状態ページをまたいで保持し続ける必要のある状態サーバーデータのキャッシュ
Client State Global State Server StateReactの状態には3種類あるUIの状態 トースト表示 APIレスポンス
Client State Global State Server StateReactの状態には3種類あるUIの状態 トースト表示 APIレスポンスクライアントの状態 サーバーの状態
本来、サーバーの状態はクライアントの状態と分けて管理されるべきである
Client State Global StateServer Stateが存在しないUIの状態 トースト表示APIレスポンス
Redux
Client State Global StateServer Stateが存在しないUIの状態 トースト表示APIレスポンスReduxでは、Server StateをGlobal Stateとして管理している
03.Client Statevs Server State
Client StateとServer Stateの違いは?以後、Client State = Client State + Global State
Client State vs Server StateClient State Server State所有者 クライアントが完全に所有している リモートに操作されうる同期性 同期的に使用することができる 非同期的に使用する必要がある最新性 常に最新の状態である 状態が古くなる可能性がある
04.非同期の状態を管理する
ReduxとReact Queryでの非同期な状態の実装を比較loadingで検証
Reduxの場合
React Queryの場合
React Queryは非同期の状態管理ライブラリだ
05.キャッシュを管理する
状態をなるべく最新に保ちたい
useQueryを使用したデータフェッチの流れ1. useQueryがコンポーネントで呼ばれ、データフェッチを開始2. queryKeyを参考にキャッシュを確認する- キャッシュヒットした場合、キャッシュされたデータをコンポーネントに返却- キャッシュヒットしなかった場合、または、キャッシュヒットしたがキャッシュがstale状態の場合は3に進む3. バックグラウンドで新しいデータをfetchしてアップデートする4. 新しいデータをキャッシュに保存して再レンダリングする
なるべくキャッシュを返してfetchを減らしたい
StaleTimeとcacheTime● staleTime○ キャッシュをstale(古くなったとみなす)状態にするまでの期間○ デフォルト:0● cacheTime○ キャッシュをガベージコレクション(メモリ領域の開放)するまでの時間○ デフォルト:5分
StaleTimeを使用する● staleTime:0○ 常に最新のデータを取得する● staleTime:Infinity○ キャッシュが常にfreshなのでネットワークのリクエストが走らず、キャッシュからデータを取得する○ 自分しか変更できないデータに有効
StaleTimeを使用する● staleTime:0○ 基本はこの設定で良い● staleTime:Infinity○ データが更新されるタイミングがわかっていればInfinityにして、更新時に明示的にinvalidateする最新性を優先する
Thanks!!!
Thanks!!!● Twitter○ https://twitter.com/ytaisei_● Qiita○ https://qiita.com/taisei-13046● Zenn○ https://zenn.dev/taisei_13046