译零 TransZero · TanStack Query 中文文档
主站

QueryCache

更新于 2026-11-02 Angular 查看英文原文 ↗

定义于:packages/query-core/src/queryCache.ts:140

QueryCache 是 TanStack Query 的存储机制。它存储其所含所有查询的数据、元信息及状态。

通常,你不会直接与 QueryCache 交互,而是为特定缓存使用一个 QueryClient。你可以订阅它(继承自 Subscribable),以获知缓存的安全/已知更新,例如查询被添加、移除或更新——但通过缓存自身未追踪的机制(例如直接修改查询的状态对象)所作的更新不会通知订阅者。

示例

TypeScript
1const unsubscribe = queryCache.subscribe((event) => {2  console.log(event.type, event.query)3})

继承自

  • Subscribable<QueryCacheListener>

构造函数

构造函数

TypeScript
1new QueryCache(config?: QueryCacheConfig): QueryCache;

定义于:packages/query-core/src/queryCache.ts:143

参数

config?

QueryCacheConfig = {}

返回值

QueryCache

覆盖

TypeScript
1Subscribable<QueryCacheListener>.constructor

属性

config

TypeScript
1config: QueryCacheConfig = {};

定义于:packages/query-core/src/queryCache.ts:143

方法

build()

TypeScript
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

QueryClient

该查询所属的客户端,用于为其选项提供默认值。

options

WithRequired<QueryOptions<TQueryFnData, TError, TData, TQueryKey, never>, "queryKey">

查询选项,包括 queryKey。新查询将基于 QueryClient#defaultQueryOptions 提供的默认值创建。

state?

QueryState<TData, TError>

新创建查询的初始状态,例如在注水(hydration)时使用。若查询已存在,则忽略此参数。

返回值

Query<TQueryFnData, TError, TData, TQueryKey>

已存在的或新创建的查询。

示例

TypeScript
1const queryCache = queryClient.getQueryCache()2 3const query = queryCache.build(queryClient, {4  queryKey: ['posts'],5  queryFn: fetchPosts,6})

clear()

TypeScript
1clear(): void;

定义于:packages/query-core/src/queryCache.ts:254

从缓存中移除所有查询。

返回值

void

示例

TypeScript
1const queryCache = queryClient.getQueryCache()2 3queryCache.clear()

find()

TypeScript
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。

参见

QueryCache#findAll

示例

TypeScript
1const queryCache = queryClient.getQueryCache()2 3const query = queryCache.find({ queryKey: ['posts'] })

findAll()

TypeScript
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[]>[]

匹配的查询。

参见

QueryCache#find

示例

TypeScript
1const queryCache = queryClient.getQueryCache()2 3const queries = queryCache.findAll({ queryKey: ['posts'] })

get()

TypeScript
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。

示例

TypeScript
1const queryCache = queryClient.getQueryCache()2const queryHash = hashKey(['posts'])3 4const query = queryCache.get(queryHash)

getAll()

TypeScript
1getAll(): Query<unknown, Error, unknown, readonly unknown[]>[];

定义于:packages/query-core/src/queryCache.ts:300

返回缓存中的所有查询。

返回值

Query<unknown, Error, unknown, readonly unknown[]>[]

缓存中的每个查询。

示例

TypeScript
1const queryCache = queryClient.getQueryCache()2 3const queries = queryCache.getAll()

hasListeners()

TypeScript
1hasListeners(): boolean;

定义于:packages/query-core/src/subscribable.ts:43

当至少有一个监听器注册时返回 true;所有监听器均已取消订阅后返回 false。

返回值

boolean

至少有一个监听器注册时返回 true。

继承自

TypeScript
1Subscribable.hasListeners

remove()

TypeScript
1remove(query: Query<any, any, any, any>): void;

定义于:packages/query-core/src/queryCache.ts:235

销毁给定的 Query 并将其从缓存中移除,同时以 'removed' 事件通知订阅者。若该查询已不再是其哈希值当前对应的那个查询(例如已被替换),则此操作无效。此方法供插件(例如广播客户端)使用,这些插件需在多个 QueryCache 实例间同步移除操作。

参数

query

Query<any, any, any, any>

待移除的查询。

返回值

void

示例

TypeScript
1const queryCache = queryClient.getQueryCache()2const query = queryCache.find({ queryKey: ['posts'] })3 4if (query) {5  queryCache.remove(query)6}

subscribe()

TypeScript
1subscribe(listener: QueryCacheListener): () => void;

定义于:packages/query-core/src/subscribable.ts:28

注册一个监听器,使其在该对象通知每次更新时被调用。返回一个用于再次移除该监听器的函数——调用它即可停止监听。基类自身永远不会主动丢弃监听器,但某些子类会在 destroy() 中清空全部监听器。

参数

listener

QueryCacheListener

每次更新时被调用,接收子类传递给其订阅者的任意参数。

返回值

一个用于移除监听器的函数。

() => void

示例

TypeScript
1const unsubscribe = subscribable.subscribe(() => {2  // react to the update3})4 5unsubscribe()

继承自

TypeScript
1Subscribable.subscribe

本页为 TanStack Query 文档(Angular 版)的非官方中文翻译,原文由上游团队维护,遵循 MIT 许可。 译文如有偏差,以英文原文为准。

译自上游 59d11de