RTK useQuery执行mutation后未自动刷新数据的解决求助
解决RTK Query上传帖子后页面不自动更新的问题
核心原因
你的createPost Mutation没有配置invalidatesTags,导致RTK Query无法识别需要让getallPosts的缓存失效并重新拉取最新数据。
解决步骤
1. 给createPost Mutation添加缓存标签失效配置
修改你的Api文件中createPost的定义,加上invalidatesTags: ['Posts'],和getallPosts的providesTags对应:
createPost: builder.mutation({ query: (data) => { return { url: "create_post", method: "POST", body: data, headers: { "Content-type": "application/json", }, }; }, // 新增这一行,让RTK Query知道要失效Posts标签的缓存 invalidatesTags: ['Posts'] }), getallPosts: builder.query({ query: () => ({ url: 'get_all_posts', method: 'GET', headers : { "Content-type": "application/json", } }), providesTags : ['Posts'] }),
2. 移除冗余的本地状态同步逻辑
你代码里的postData函数用dispatch(setPost(item))把数据同步到本地Redux切片,这完全没必要——RTK Query的useGetallPostsQuery已经帮你管理了数据缓存,直接用getallPosts.data就能拿到最新数据用于渲染。保留这部分逻辑反而会导致本地状态和RTK Query缓存不同步,建议删除:
// 删掉这段冗余代码 // const postData = async () => { // if(getallPosts.currentData){ // getallPosts.currentData.data.posts.map(item => dispatch(setPost(item))) // console.log(getallPosts.currentData.data) // } // };
修改完成后,当你调用createPost的mutation成功后,RTK Query会自动触发getallPosts的重新请求,页面就能直接显示最新的帖子数据,不需要刷新页面。
内容的提问来源于stack exchange,提问作者Asif Muhammad
相关产品推荐
相关产品推荐

