You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RTK Query中useMutation的data为undefined,unwrap却能获取数据的原因

问题原因与解答

为什么解构的data是undefined?

RTK Query里的mutation默认不会缓存响应结果,而useMutation解构出来的data,本质是从RTK Query的缓存中读取最近一次成功请求的响应。因为你没给这个mutation配置缓存规则,缓存里没有数据,自然data就是undefined。

而postSomeData().unwrap()是直接获取本次请求Promise的返回值,这是请求的实时响应结果,和缓存完全无关,所以能拿到你通过responseHandler转换后的base64字符串。

useMutation返回的data到底有啥用?

这个data是用来读取该mutation最近一次成功完成且被缓存的响应数据,只有当你给mutation配置了缓存策略时才会有值,适用场景比如:

  • 给mutation设置keepUnusedDataFor参数,指定缓存保留时间,后续组件重新渲染时,不用再发请求就能拿到之前的响应结果。
  • 当多个组件需要共享同一个mutation的成功响应,或者需要在组件多次渲染时保留上次的成功结果,这个data就可以直接用。

举个配置缓存的例子,在你的apiSlice的mutation定义里加一行:

mutations: {
  postSomeData: build.mutation({
    query: (body) => ({ /* 你的query配置 */ }),
    responseHandler: (response) => {
      // 你的base64转换逻辑
    },
    keepUnusedDataFor: 60, // 缓存保留60秒
  }),
}

这样之后,当你第一次调用postSomeData成功后,解构的data就会有值,直到缓存过期或者被清除。

内容的提问来源于stack exchange,提问作者DjoMan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 11:15:05