React Query中含参数查询的失效问题:仅失效posts键是否会刷新全部缓存
React Query中含参数查询的失效问题:仅失效posts键是否会刷新全部缓存
嘿,这个问题问得很实用!我来给你掰扯清楚~
答案是肯定的:如果你调用 invalidateQueries({ queryKey: ["posts"] })(或者简化传"posts"),会触发所有以"posts"作为queryKey第一个元素的缓存条目重新获取,不管后面跟着的params是什么。
原因在于React Query的queryKey匹配规则
React Query的失效操作支持部分匹配:当你提供一个部分queryKey时,所有前缀和这个部分匹配的完整queryKey都会被命中。比如你的代码里,不管用户传的params是{category: "javascript"}还是{search: "react-query"},对应的queryKey都是["posts", 具体参数对象],这些都会被["posts"]这个部分key匹配到,进而全部失效并刷新。
对应你的场景来说
你提到新增帖子后要失效筛选结果,这种用invalidateQueries(["posts"])的方式其实非常合适——因为不管用户之前用了什么筛选条件,新增帖子后所有相关的帖子列表都应该更新,刚好可以一次性把所有带不同参数的posts缓存都刷新一遍。
额外补充:如果只想失效特定参数的查询
要是你之后有需求只想刷新某一个特定筛选条件的缓存,比如只失效分类为"tech"的帖子,那就要传完整的queryKey:
invalidateQueries({ queryKey: ["posts", { category: "tech" }] })
这样就只会命中这个特定的缓存条目,不会影响其他参数的查询结果。
备注:内容来源于stack exchange,提问作者Talorcan
相关产品推荐
相关产品推荐

