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
相关产品推荐
相关产品推荐

