React Query中invalidateQueries未按预期生效问题求助
问题原因与解决方法
核心问题:invalidateQueries调用方式错误
你直接传递["test"]给invalidateQueries的写法不符合React Query的API规范,导致该方法匹配了所有查询,而非仅["test"]。
React Query的invalidateQueries方法接受的是一个配置对象,而非直接传入queryKey数组。当你直接传["test"]时,这个数组会被当作配置对象处理——由于没有明确指定queryKey字段,React Query会默认匹配所有已存在的查询,因此["todos"]查询也被标记为失效并重新发起请求。
修复方案
将invalidateQueries的调用改为传入包含queryKey字段的配置对象:
const { mutate: handleAddTodo } = useMutation({ mutationFn: addTodo, onSuccess: () => { // 正确写法:通过配置对象指定queryKey queryClient.invalidateQueries({ queryKey: ["test"] }); }, });
验证说明
修改后,只有键为["test"]的查询会被标记为失效,["todos"]查询不会触发自动刷新,你的全局配置(refetchOnMount、staleTime等)也会正常生效。
内容的提问来源于stack exchange,提问作者sungji
相关产品推荐
相关产品推荐

