前端
PythonJava运维数据库
TanStack Query
TanStack Query
  • getting started
    • 快速开始
    • 开发工具
    • Typescript
    • 默认配置
    • 网络模式
  • Query
    • 查询
    • 查询键
    • 查询函数
    • 查询选项
    • 并行查询
    • 有依赖的查询
    • 查询状态指示器
    • 窗口聚焦重新获取数据
    • 禁用/暂停查询
    • 查询重试
    • 分页查询
    • 无限查询
    • 初始化查询数据
  • 占位符
  • Mutation
    • 修改 Mutations
    • 主动查询失效 Query Invalidation
    • 修改导致的失效 Invalidation From Mutations
    • 通过修改的数据更新查询内容
    • 乐观更新
  • 取消查询
  • 默认查询函数
  • 过滤器
  • Suspense
  • 缓存数据
  • Api Reference
    • QueryClient
    • QueryCache
    • MutationCache
    • QueryObserver QueriesObserver
    • InfiniteQueryObserver
    • FocusManager
    • NotifyManager
    • useQuery
    • useQueries useInfiniteQuery
    • useMutation
    • useIsFetching
    • useIsMutating
    • useMutationState
    • useSuspenseQuery
    • useSuspenseInfiniteQuery
    • useSuspenseQueries
    • QueryClientProvider
    • useQueryClient
    • queryOptions
    • infiniteQueryOptions
    • QueryErrorResetBoundary
    • useQueryErrorResetBoundary
    • hydration
由 GitBook 提供支持
在本页
  • 简单的 QueryKey
  • 带变量的 QueryKey
  • QueryKey 是以确定性方式进行哈希计算的
  • 如果 QueryKey 依赖于变量,请将其包含在查询键中

这有帮助吗?

  1. Query

查询键

Tanstack Query 的核心功能是根据queryKey来管理查询缓存,queryKey顶层必须是一个数组,可以是一个仅包含字符串的简单数组,也可以是包含多个字符串和嵌套对象的复杂数组,只要queryKey是可序列化且能唯一标识查询的数据,你就可以使用它。

简单的 QueryKey

最简单的queryKey形式是一个包含固定值的数组,这种格式适用于:

  • 通用的列表或索引资源

  • 非层级结构的资源

// A list of todos
useQuery({ queryKey: ['todos'], ... })

// Something else, whatever!
useQuery({ queryKey: ['something', 'special'], ... })

带变量的 QueryKey

当查询需要更多的信息来唯一标识其数据时,可以使用一个包含字符串和任意数量可序列化对象的数组来描述它。

// 单个 todo 项目
useQuery({ queryKey: ['todo', 5], ... })

// 以 "preview" 格式展示的单个 todo 项目
useQuery({ queryKey: ['todo', 5, { preview: true }], ...})

// 状态为 "done" 的 todo 列表
useQuery({ queryKey: ['todos', { type: 'done' }], ... })

QueryKey 是以确定性方式进行哈希计算的

这意味着对象中 key 的顺序不会影响哈希结果,因此以下查询 key 会被视为相同:

useQuery({ queryKey: ['todos', { status, page }], ... })
useQuery({ queryKey: ['todos', { page, status }], ...})
useQuery({ queryKey: ['todos', { page, status, other: undefined }], ... })

但是,以下查询键并不相等,数组项的顺序很重要!

useQuery({ queryKey: ['todos', status, page], ... })
useQuery({ queryKey: ['todos', page, status], ...})
useQuery({ queryKey: ['todos', undefined, page, status], ...})

如果 QueryKey 依赖于变量,请将其包含在查询键中

由于queryKey唯一标识所获取的数据,因此它们应该包含查询函数中使用的、会发生变化的所有变量。例如:

function Todos({ todoId }) {
  const result = useQuery({
    queryKey: ["todos", todoId],
    queryFn: () => fetchTodoById(todoId)
  });
}
上一页查询下一页查询函数

最后更新于2个月前

这有帮助吗?

注意,queryKey 充当查询函数的依赖项。将依赖变量添加到queryKey将确保查询被独立缓存,并且每当变量发生变化时,查询都会自动重新获取(取决于您的staleTime设置)。有关更多信息和示例,请参阅

exhaustive-deps 部分。