过滤器

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

查询过滤器(Query Filters)

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

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

// 移除所有以 `posts` 开头且状态为非激活的查询
queryClient.removeQueries({ queryKey: ['posts'], type: 'inactive' })

// 重新获取所有激活状态的查询
await queryClient.refetchQueries({ type: 'active' })

// 重新获取所有以 `posts` 开头且处于激活状态的查询
await queryClient.refetchQueries({ queryKey: ['posts'], type: 'active' })

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

  • queryKey?: QueryKey

    • 设置此属性可定义要匹配的查询键。

  • exact?: boolean

    • 如果你不想通过查询键进行包含性搜索,可以传入 exact: true 选项,仅返回与你传递的确切查询键匹配的查询。

  • type?: 'active' | 'inactive' | 'all'

    • 默认值为 all

    • 当设置为 active 时,将匹配激活状态的查询。

    • 当设置为 inactive 时,将匹配非激活状态的查询。

  • stale?: boolean

    • 当设置为 true 时,将匹配已过期(stale)的查询。

    • 当设置为 false 时,将匹配新鲜的(fresh)查询。

  • fetchStatus?: FetchStatus

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

    • 当设置为 paused 时,将匹配想要获取数据但已被暂停的查询。

    • 当设置为 idle 时,将匹配未在获取数据的查询。

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

    • 此谓词函数将作为最终筛选条件应用于所有匹配的查询。如果没有指定其他过滤器,该函数将对缓存中的每个查询进行评估。

变更过滤器(Mutation Filters)

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

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

// 按 mutationKey 过滤变更
await queryClient.isMutating({ mutationKey: ['post'] })

// 使用谓词函数过滤变更
await queryClient.isMutating({
  predicate: (mutation) => mutation.state.variables?.id === 1,
})

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

  • mutationKey?: MutationKey

    • 设置此属性可定义要匹配的变更键。

  • exact?: boolean

    • 如果你不想通过变更键进行包含性搜索,可以传入 exact: true 选项,仅返回与你传递的确切变更键匹配的变更。

  • status?: MutationStatus

    • 允许根据变更的状态来过滤变更。

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

    • 此谓词函数将作为最终筛选条件应用于所有匹配的变更。如果没有指定其他过滤器,该函数将对缓存中的每个变更进行评估。

工具函数(Utils)

matchQuery

const isMatching = matchQuery(filters, query)

返回一个布尔值,指示某个查询是否与提供的查询过滤器集合相匹配。

matchMutation

const isMatching = matchMutation(filters, mutation)

返回一个布尔值,指示某个变更是否与提供的变更过滤器集合相匹配。

最后更新于

这有帮助吗?