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

Redux Toolkit异步Action返回undefined问题求助

问题原因及修复方案

问题根源

你定义的getMenuItems异步thunk函数没有返回请求的最终数据:

  • 虽然用了async关键字,但函数内部的axios.get()链式调用没有return最终结果;
  • async函数如果没有显式return值,默认会返回undefined,这就导致action.payload为undefined。

修复方案

有两种简洁的修复方式,任选其一即可:

方式一:用await替代then链(推荐,代码更易读)

import { createSlice, createAsyncThunk } from "@reduxjs/toolkit";
import axios from "axios";

export const getMenuItems = createAsyncThunk(
  "menuItems/getMenuItems",
  async () => {
    const response = await axios.get("https://run.mocky.io/v3/eaf5dd77-5306-4093-ba7b-66364be1eacc");
    return response.data;
  }
);

const slice = createSlice({
  name: "menuItems",
  initialState: [],
  reducers: {},
  extraReducers: (builder) => {
    builder.addCase(getMenuItems.fulfilled, (state, action) => {
      console.log("state:", state);
      console.log("action:", action.payload); // 现在能拿到正确的data了
    });
  },
});

export default slice.reducer;

方式二:保留then链,补充return语句

import { createSlice, createAsyncThunk } from "@reduxjs/toolkit";
import axios from "axios";

export const getMenuItems = createAsyncThunk(
  "menuItems/getMenuItems",
  async () => {
    // 关键:在axios调用前加上return,把整个promise链返回出去
    return axios
      .get("https://run.mocky.io/v3/eaf5dd77-5306-4093-ba7b-66364be1eacc")
      .then((response) => response)
      .then((item) => item.data);
  }
);

const slice = createSlice({
  name: "menuItems",
  initialState: [],
  reducers: {},
  extraReducers: (builder) => {
    builder.addCase(getMenuItems.fulfilled, (state, action) => {
      console.log("state:", state);
      console.log("action:", action.payload); // 现在能拿到正确的data了
    });
  },
});

export default slice.reducer;

修改后,当异步请求成功完成时,action.payload就会正确获取到接口返回的数据,和你预期的一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 09:51:02