React query 的 stale 機制

一直以來沒搞很清楚的 react-query 的兩個機制

在 useQuery hook 中有兩個參數 staleTimecacheTime

這兩個具體上的不同是什麼?

先講論好了

staleTime 是告訴 react query 這個資料多久之內是最新的

cacheTime 是告訴 react query cache 的 data 要 cache 多久

fresh

打開 react query dev tools 可以看到 fresh 和 stale 兩個 tag

而 staleTime 所定義的時間為「多久後」資料會變成 fresh

因此 staleTime 設定為 0 的時候就不會有 fresh 狀態的 data

那問題來了

fresh 代表什麼意思?

fresh 狀態的資料不用重新 call api

沒錯

就是直接從 cache 拿資料

stale

其實 stale 很簡單

就是下次在 render 的時候會重新 call api 拿資料

並「更新」cache 的 data

這邊為何說是「更新」,後面會解釋

最大的疑問

cacheTime = 0 乍看之下和 staleTime = 0 怎麼好像沒有差異?

cacheTime 到了,就會把 cache 的資料丟棄

staleTime 到了,就會將資料視為「陳舊」的資料

這就是為什麼兩個時間設置為 0 都會重新獲得資料

所以 staleTime 到了是更新 cache data

cache Time 到了是重新加到 cache

因為實際上 cache 不會只有 data 還有一些狀態