过滤器

Filters(过滤器)

在 TanStack Query 中,一些方法接受 QueryFiltersMutationFilters 对象。

Query Filters(查询过滤器)

查询过滤器是一个对象,其中包含用于匹配查询的特定条件:

// 取消所有查询
await queryClient.cancelQueries();

// 移除所有 `queryKey` 以 `posts` 开头的非活跃查询
queryClient.removeQueries({ queryKey: ["posts"], type: "inactive" });

// 重新获取所有活跃查询
await queryClient.refetchQueries({ type: "active" });

// 重新获取所有 `queryKey` 以 `posts` 开头的活跃查询
await queryClient.refetchQueries({ queryKey: ["posts"], type: "active" });

查询过滤器对象支持以下属性:

  • queryKey?: QueryKey: 设置此属性以匹配特定的 queryKey

  • exact?: boolean: 如果不想使用模糊匹配 queryKey,可以传入 exact: true,这样只会匹配完全相同的 queryKey

  • type?: 'active' | 'inactive' | 'all'**(默认为 'all'

    • 设为 'active' 将匹配活跃的查询。

    • 设为 'inactive' 将匹配非活跃的查询。

  • stale?: boolean

    • 设为 true 时,将匹配过期查询。

    • 设为 false 时,将匹配新鲜查询。

  • fetchStatus?: FetchStatus

    • 设为 'fetching' 将匹配当前正在获取数据的查询。

    • 设为 'paused' 将匹配本应获取数据但被暂停的查询。

    • 设为 'idle' 将匹配当前未获取数据的查询。

  • predicate?: (query: Query) => boolean

    • 该谓词函数将作为最终过滤条件应用于所有匹配的查询。

    • 如果未指定其他过滤条件,该函数将对缓存中的所有查询进行评估。

Mutation Filters(变更过滤器)

变更过滤器是一个对象,其中包含用于匹配变更的特定条件:

// 获取所有正在获取数据的 mutation 数量
await queryClient.isMutating();

// 通过 mutationKey 过滤 mutations
await queryClient.isMutating({ mutationKey: ["post"] });

// 通过谓词函数过滤 mutations
await queryClient.isMutating({
  predicate: (mutation) => mutation.state.variables?.id === 1,
});

变更过滤器对象支持以下属性:

  • mutationKey?: MutationKey: 设置此属性以匹配特定的 mutationKey

  • exact?: boolean: 如果不想使用模糊匹配 mutationKey,可以传入 exact: true,这样只会匹配完全相同的 mutationKey

  • status?: MutationStatus: 允许根据 mutation 的状态进行过滤。

  • predicate?: (mutation: Mutation) => boolean

    • 该谓词函数将作为最终过滤条件应用于所有匹配的 mutation

    • 如果未指定其他过滤条件,该函数将对缓存中的所有 mutation 进行评估。

Utils(工具函数)

matchQuery

const isMatching = matchQuery(filters, query);

返回一个布尔值,指示某个查询是否符合提供的 queryFilters 过滤条件。

matchMutation

const isMatching = matchMutation(filters, mutation);

返回一个布尔值,指示某个变更是否符合提供的 mutationFilters 过滤条件。

最后更新于

这有帮助吗?