React Query v4中能否用包含性查询键调用setQueriesData?
React Query v4 实现查询键包含性匹配更新数据
React Query 默认的查询键匹配逻辑是前缀匹配,而非包含性匹配。这就是为什么你用 ['key2'] 无法匹配到查询键为 ['key1', 'key2', 'key3'] 的查询——因为 ['key2'] 不是目标查询键的前缀。
要实现类似 invalidateQueries 的包含性匹配(只要查询键中存在目标值就匹配),你需要使用**过滤器函数(predicate)**替代数组形式的查询键参数:
queryClient.setQueriesData<InfiniteData<Data>>( { predicate: (query) => query.queryKey.includes('key2') }, (prev) => { if (!prev) return undefined; return { ...prev, pages: prev?.pages?.map((page) => updater(page)), }; }, );
关键说明:
predicate函数会遍历所有缓存中的查询,返回true的查询会被选中进行数据更新。- 你可以在函数中自定义匹配逻辑,比如检查查询键是否包含某个特定元素、是否符合某种模式等,完全满足包含性匹配的需求。
- 数组形式的查询键仅支持前缀匹配:只有当传入的数组是目标查询键的起始前缀时才会匹配(比如
['key1']匹配['key1', 'key2', 'key3'],['key1', 'key2']也匹配,但['key2']不匹配)。
内容的提问来源于stack exchange,提问作者Darren Zou
相关产品推荐
相关产品推荐

