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

QueryCache

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

定义于:packages/vue-query/src/queryCache.ts:16

@tanstack/query-core 的 QueryCache 的 Vue 感知子类。find/findAll 还接受一个 MaybeRefDeep 类型的过滤器对象,因此可直接传入 ref,无需解包。可通过 queryClient.getQueryCache() 访问 —— QueryClient 默认会构造一个此类实例。

继承自

  • QueryCache

构造函数

构造函数

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

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

参数

config?

QueryCacheConfig = {}

返回值

QueryCache

继承自

TypeScript
1QC.constructor

属性

config

TypeScript
1config: QueryCacheConfig = {};

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

继承自

TypeScript
1QC.config

方法

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})

继承自

TypeScript
1QC.build

clear()

TypeScript
1clear(): void;

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

从缓存中移除所有查询。

返回值

void

示例

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

继承自

TypeScript
1QC.clear

find()

TypeScript
1find<TQueryFnData = unknown, TError = Error, TData = TQueryFnData>(filters: MaybeRefDeep<WithRequired<QueryFilters<readonly unknown[]>, "queryKey">>): 2  | Query<TQueryFnData, TError, TData, readonly unknown[]>3  | undefined;

定义于:packages/vue-query/src/queryCache.ts:17

一个稍高级的方法,可用于从缓存中获取现有的查询实例。该实例不仅包含查询的所有状态,还包含所有实例及其底层实现细节。若查询不存在,则返回 undefined。

大多数应用通常不需要此方法,但在极少数场景下(例如检查 query.state.dataUpdatedAt 以判断查询是否足够新鲜、可作为初始值使用)可能非常有用。

类型参数

TQueryFnData

TQueryFnData = unknown

TError

TError = Error

TData

TData = TQueryFnData

参数

filters

MaybeRefDeep<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'] })

重写自

TypeScript
1QC.find

findAll()

TypeScript
1findAll(filters?: MaybeRefDeep<QueryFilters<readonly unknown[]>>): Query<unknown, Error, unknown, readonly unknown[]>[];

定义于:packages/vue-query/src/queryCache.ts:27

一个更高级的方法,可用于从缓存中获取部分匹配查询键的现有查询实例。若无匹配查询,则返回空数组。

大多数应用通常不需要此方法,但在极少数场景下(例如需要更多关于查询的信息)可能非常有用。

参数

filters?

MaybeRefDeep<QueryFilters<readonly unknown[]>> = {}

匹配用的过滤器。若不提供过滤器,则返回所有查询。

返回值

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

匹配的查询。

参见

QueryCache#find

示例

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

重写自

TypeScript
1QC.findAll

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)

继承自

TypeScript
1QC.get

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()

继承自

TypeScript
1QC.getAll

hasListeners()

TypeScript
1hasListeners(): boolean;

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

至少有一个监听器注册时返回 true;全部取消订阅后返回 false。

返回值

boolean

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

继承自

TypeScript
1QC.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}

继承自

TypeScript
1QC.remove

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
1QC.subscribe

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

译自上游 59d11de