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

如何在createAsyncThunk中通过Axios同时获取响应头与数据

问题解决:createAsyncThunk返回Axios Response导致控制台报错

问题原因

直接返回Axios的完整Response对象时,对象里包含不可序列化的属性(比如请求配置中的函数、循环引用对象等),Redux处理action payload的序列化操作时会触发报错,虽然功能能正常运行,但控制台会出现警告或错误信息。

解决方案

不要返回完整的Axios Response,手动提取需要的data和headers字段,返回一个自定义的可序列化对象即可:

修改异步请求代码

export const fetchPizzas = createAsyncThunk("items/fetchPizzasStatus", async (params) => {
  const { category, sortBy, order, search, perPage, currentPage } = params;
  const res = await axios.get(`http://localhost:3001/items?${category}&q=${search}&_sort=${sortBy}&_order=${order}&_page=${currentPage}&_limit=${perPage}`);
  // 只返回需要的可序列化数据
  return {
    data: res.data,
    totalCount: res.headers["x-total-count"]
  };
});

同步修改Reducer处理逻辑

[fetchPizzas.fulfilled]: (state, action) => {
  state.status = "success";
  state.pizzas = action.payload.data;
  state.itemsCount = action.payload.totalCount;
},

原理说明

自定义的对象只包含数组、字符串、数字这类普通可序列化类型,完全符合Redux对action payload的序列化要求,既解决了控制台报错问题,又能正常获取分页所需的总条目数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:18:05