reactjs 如何在react-query中获取当前活动的queryKeys

7fyelxc5  于 2022-12-03  发布在  React
关注(0)|答案(2)|浏览(196)

我需要使useMutationonSuccess中的一些查询无效。
我有一个queryKey模式,如下所示:

.....
1-["questions", "by_vendor" , "{vendor_code}" , "by_status", "{status}"]
2-["questions", "by_status", "{status}"]
3-["questions",  "by_vendor", "{vendor_code}"]
.....

我使用useQueryClient来获取查询客户机。
我需要使使用"by_status"querykeys无效。
是否有访问active queryKeys的方法。
有一些方法类似于queryClient.getQueryData(),但都需要预先使用queryKey
谢谢你,谢谢你

umuewwlo

umuewwlo1#

我建议你稍微重新组织一下你的查询键。使用对象作为键比使用建议的“列表”样式要容易得多。

return useQuery(
  ['questions', { by_vendor: vendor, by_status: status }],
  async ({queryKey}) => {
    // Stuff to use the query key and get api data
  }
);

然后,您可以稍后使用以下命令使它们无效:

queryClient.invalidateQueries({
  queryKey: ['questions', { by_status: status }],
})

有关更多信息,请查看Effective React-Query KeysQuery Invalidation

xa9qqrwz

xa9qqrwz2#

正如Chad S所提到的,无效查询可以通过使用对象作为键来完成,该方法将通过匹配来工作,它不一定需要精确的查询来匹配,并且有一个标记用于此:exact: true .
但是要获得querykeys,如果这是你正在寻找的,那么这里有一个解释。
要访问客户端正在侦听的queryKeys,请使用useQueryClient挂钩。

const queryClient = useQueryClient()

使用呼叫的拦截,可以存取方法:getQueryCache()。这将返回客户端连接到的查询缓存。参考
现在要获取活动的查询键,调用queryCache中的方法getAll(),这将返回一个Query数组。现在可以访问QueryKey

const queryCache = queryClient.getQueryCache()
const queryKeys = queryCache.getAll().map(cache => cache.queryKey) // QueryKey[]

相关问题