如何在react-query中获取活跃queryKeys并失效含by_status的查询
解决React Query中批量失效含特定关键词的查询
直接用invalidateQueries的匹配规则(推荐)
不用手动获取所有活跃queryKey,React Query的queryClient.invalidateQueries支持通过predicate函数批量匹配目标查询,这是最简洁高效的方式。
在useMutation的onSuccess回调中这么写:
const queryClient = useQueryClient(); const mutation = useMutation( // 你的mutation函数 (data) => api.updateQuestion(data), { onSuccess: () => { // 失效所有包含"by_status"的查询 queryClient.invalidateQueries({ predicate: (query) => query.queryKey.includes("by_status") }); } } );
如果需要更精确的匹配(比如确保根key是"questions"),可以调整predicate:
predicate: (query) => query.queryKey[0] === "questions" && query.queryKey.includes("by_status")
获取当前活跃的queryKey方法
如果你确实需要获取所有活跃状态的queryKey,可以通过查询缓存的getAll方法实现:
const queryClient = useQueryClient(); // 获取所有缓存中的查询 const allQueries = queryClient.getQueryCache().getAll(); // 过滤出活跃状态的并提取queryKey const activeQueryKeys = allQueries .filter(query => query.state.status === "active") .map(query => query.queryKey);
不过更推荐用第一种invalidateQueries的方式,避免手动遍历缓存的额外开销。
内容的提问来源于stack exchange,提问作者Woohaik
相关产品推荐
相关产品推荐

