QueryCache 是 TanStack Query 的儲存機制,它儲存了所有查詢的資料、元資訊和狀態。
通常情況下,您不會直接與 QueryCache 互動,而是針對特定快取使用 QueryClient。
import { QueryCache } from '@tanstack/react-query'
const queryCache = new QueryCache({
onError: (error) => {
console.log(error)
},
onSuccess: (data) => {
console.log(data)
},
onSettled: (data, error) => {
console.log(data, error)
},
})
const query = queryCache.find(['posts'])
import { QueryCache } from '@tanstack/react-query'
const queryCache = new QueryCache({
onError: (error) => {
console.log(error)
},
onSuccess: (data) => {
console.log(data)
},
onSettled: (data, error) => {
console.log(data, error)
},
})
const query = queryCache.find(['posts'])
它提供的方法包括:
選項
find 是一個稍微進階的同步方法,可用於從快取中獲取現有的查詢實例。此實例不僅包含查詢的所有狀態,還包含所有實例和查詢的底層細節。如果查詢不存在,則會返回 undefined。
注意:大多數應用程式通常不需要使用此方法,但在罕見情況下需要獲取查詢的更多資訊時會很有用(例如:查看 query.state.dataUpdatedAt 時間戳來決定查詢是否足夠新鮮,可作為初始值使用)
const query = queryCache.find(queryKey)
const query = queryCache.find(queryKey)
選項
回傳值
findAll 是一個更進階的同步方法,可用於從快取中獲取部分匹配查詢鍵的現有查詢實例。如果查詢不存在,則會返回空陣列。
注意:大多數應用程式通常不需要使用此方法,但在罕見情況下需要獲取查詢的更多資訊時會很有用
const queries = queryCache.findAll(queryKey)
const queries = queryCache.findAll(queryKey)
選項
回傳值
subscribe 方法可用於訂閱整個查詢快取,並在快取發生安全/已知的更新時收到通知,例如查詢狀態變更或查詢被更新、新增或移除。
const callback = (event) => {
console.log(event.type, event.query)
}
const unsubscribe = queryCache.subscribe(callback)
const callback = (event) => {
console.log(event.type, event.query)
}
const unsubscribe = queryCache.subscribe(callback)
選項
回傳值
clear 方法可用於完全清除快取並重新開始。
queryCache.clear()
queryCache.clear()
若要更深入理解 QueryCache 的內部運作原理,請參閱社群資源中的 #18: Inside React Query。