QueryCache
定义于:packages/query-core/src/queryCache.ts:140
QueryCache 是 TanStack Query 的存储机制。它存储其所含所有查询的数据、元信息及状态。
通常,你不会直接与 QueryCache 交互,而是为特定缓存使用一个 QueryClient。你可以订阅它(继承自 Subscribable),以便在缓存发生安全/已知更新时收到通知,例如查询被添加、移除或更新;但通过缓存自身未追踪的机制(例如直接修改查询的状态对象)所作的更新不会通知订阅者。
示例
1const unsubscribe = queryCache.subscribe((event) => {2 console.log(event.type, event.query)3})继承自
Subscribable<QueryCacheListener>
构造函数
构造函数
1new QueryCache(config?: QueryCacheConfig): QueryCache;定义于:packages/query-core/src/queryCache.ts:143
参数
config?
QueryCacheConfig = {}
返回值
QueryCache
覆盖
1Subscribable<QueryCacheListener>.constructor属性
config
1config: QueryCacheConfig = {};定义于:packages/query-core/src/queryCache.ts:143
方法
build()
1build<TQueryFnData = unknown, TError = Error, TData = TQueryFnData, TQueryKey extends readonly unknown[] = readonly unknown[]>(2 client: QueryClient, 3 options: WithRequired<QueryOptions<TQueryFnData, TError, TData, TQueryKey, never>, "queryKey">, 4 state?: QueryState<TData, TError>5): Query<TQueryFnData, TError, TData, TQueryKey>;定义于:packages/query-core/src/queryCache.ts:169
根据给定选项的 queryKey/queryHash,返回已存在的 Query 实例;若尚不存在,则构建并将其加入缓存。该方法供框架适配器和插件(例如广播/持久化插件)使用,这些插件需要直接获取或创建 Query,从而绕过响应式的 QueryObserver 机制。
类型参数
TQueryFnData
TQueryFnData = unknown
TError
TError = Error
TData
TData = TQueryFnData
TQueryKey
TQueryKey extends readonly unknown[] = readonly unknown[]
参数
client
查询所属的客户端,用于默认其选项。
options
WithRequired<QueryOptions<TQueryFnData, TError, TData, TQueryKey, never>, "queryKey">
查询选项,包括 queryKey。新查询将使用 QueryClient#defaultQueryOptions 默认化其选项后创建。
state?
QueryState<TData, TError>
新创建查询的初始状态,例如在注水(hydration)时使用。若查询已存在,则忽略此参数。
返回值
Query<TQueryFnData, TError, TData, TQueryKey>
已存在的或新创建的查询。
示例
1const queryCache = queryClient.getQueryCache()2 3const query = queryCache.build(queryClient, {4 queryKey: ['posts'],5 queryFn: fetchPosts,6})clear()
1clear(): void;定义于:packages/query-core/src/queryCache.ts:254
从缓存中移除所有查询。
返回值
void
示例
1const queryCache = queryClient.getQueryCache()2 3queryCache.clear()find()
1find<TQueryFnData = unknown, TError = Error, TData = TQueryFnData>(filters: WithRequired<QueryFilters<readonly unknown[]>, "queryKey">): 2 | Query<TQueryFnData, TError, TData, readonly unknown[]>3 | undefined;定义于:packages/query-core/src/queryCache.ts:324
一种稍高级的方法,可用于从缓存中获取现有查询实例。该实例不仅包含查询的所有状态,还包含其所有实例及底层实现细节。若查询不存在,则返回 undefined。
大多数应用通常不需要此方法,但在极少数场景下(例如检查 query.state.dataUpdatedAt 以判断查询是否足够新鲜、可作为初始值使用)可能非常有用。
类型参数
TQueryFnData
TQueryFnData = unknown
TError
TError = Error
TData
TData = TQueryFnData
参数
filters
WithRequired<QueryFilters<readonly unknown[]>, "queryKey">
匹配用的过滤器,包括必需的 queryKey。exact 默认为 true。
返回值
| Query<TQueryFnData, TError, TData, readonly unknown[]>
| undefined
首个匹配的查询,或 undefined。
参见
示例
1const queryCache = queryClient.getQueryCache()2 3const query = queryCache.find({ queryKey: ['posts'] })findAll()
1findAll(filters?: QueryFilters<any>): Query<unknown, Error, unknown, readonly unknown[]>[];定义于:packages/query-core/src/queryCache.ts:350
一种更高级的方法,可用于从缓存中获取部分匹配查询键的现有查询实例。若无匹配查询,则返回空数组。
大多数应用通常不需要此方法,但在极少数场景下(例如需要获取有关多个查询的更多信息)可能非常有用。
参数
filters?
QueryFilters<any> = {}
匹配用的过滤器。不提供过滤器时,将返回所有查询。
返回值
Query<unknown, Error, unknown, readonly unknown[]>[]
匹配的查询。
参见
示例
1const queryCache = queryClient.getQueryCache()2 3const queries = queryCache.findAll({ queryKey: ['posts'] })get()
1get<TQueryFnData = unknown, TError = Error, TData = TQueryFnData, TQueryKey extends readonly unknown[] = readonly unknown[]>(queryHash: string): 2 | Query<TQueryFnData, TError, TData, TQueryKey>3 | undefined;定义于:packages/query-core/src/queryCache.ts:277
返回存储在指定 queryHash 下的 Query 实例;若不存在,则返回 undefined。与 QueryCache#find 不同,此方法通过已计算出的哈希值查找,而非通过 QueryFilters。该方法供插件(例如广播/注水插件)使用,这些插件已持有哈希值,可直接查找。
类型参数
TQueryFnData
TQueryFnData = unknown
TError
TError = Error
TData
TData = TQueryFnData
TQueryKey
TQueryKey extends readonly unknown[] = readonly unknown[]
参数
queryHash
string
待查找查询的哈希值。
返回值
| Query<TQueryFnData, TError, TData, TQueryKey>
| undefined
存储在该哈希值下的查询,或 undefined。
示例
1const queryCache = queryClient.getQueryCache()2const queryHash = hashKey(['posts'])3 4const query = queryCache.get(queryHash)getAll()
1getAll(): Query<unknown, Error, unknown, readonly unknown[]>[];定义于:packages/query-core/src/queryCache.ts:300
返回缓存中的所有查询。
返回值
Query<unknown, Error, unknown, readonly unknown[]>[]
缓存中的每个查询。
示例
1const queryCache = queryClient.getQueryCache()2 3const queries = queryCache.getAll()hasListeners()
1hasListeners(): boolean;定义于:packages/query-core/src/subscribable.ts:43
当至少注册了一个监听器时返回 true;当所有监听器均已取消订阅时返回 false。
返回值
boolean
至少注册了一个监听器时返回 true。
继承自
1Subscribable.hasListenersremove()
1remove(query: Query<any, any, any, any>): void;定义于:packages/query-core/src/queryCache.ts:235
销毁给定的 Query 并将其从缓存中移除,并通过 'removed' 事件通知订阅者。若该查询已不再是其哈希值当前对应的那个查询(例如已被替换),则此操作为无操作(no-op)。该方法供插件(例如广播客户端)使用,这些插件需在多个 QueryCache 实例间同步移除操作。
参数
query
Query<any, any, any, any>
要移除的查询。
返回值
void
示例
1const queryCache = queryClient.getQueryCache()2const query = queryCache.find({ queryKey: ['posts'] })3 4if (query) {5 queryCache.remove(query)6}subscribe()
1subscribe(listener: QueryCacheListener): () => void;定义于:packages/query-core/src/subscribable.ts:28
注册一个监听器,使其在该对象通知每次更新时被调用。返回一个用于再次移除该监听器的函数——调用它即可停止监听。基类自身永远不会主动丢弃监听器,但某些子类会在 destroy() 中清空全部监听器。
参数
listener
QueryCacheListener
每次更新时被调用,接收子类传递给其订阅者的任意参数。
返回值
一个用于移除监听器的函数。
() => void
示例
1const unsubscribe = subscribable.subscribe(() => {2 // react to the update3})4 5unsubscribe()继承自
1Subscribable.subscribe