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

使用Redux Thunk+Axios获取API数据时触发TypeError: Cannot read 'type'

问题解决:TypeError: Cannot read properties of undefined (reading 'type')

错误根源在于你对createAsyncThunk的使用方式错误——你把fetchMarketData定义成了一个返回createAsyncThunk结果的嵌套函数,但Redux Toolkit要求createAsyncThunk直接创建并导出可被dispatch的thunk动作,这种嵌套写法会导致dispatch时传递的不是合法的action对象,从而触发类型错误。

修正后的marketSlice.js

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

// 正确定义异步Thunk:直接用createAsyncThunk创建,异步函数接收dispatch时传入的参数
export const fetchMarketData = createAsyncThunk(
  'market/fetchData', async (requestData) => {
    const url = 'http://localhost:8000/api/market'
    const headers = {
      'Content-Type': 'application/json',
    };
    // 用async/await简化异步逻辑(可选,也可以保留.then写法)
    const response = await axios.post(url, requestData, {headers})
    return response.data
  }
);

export const marketSlice = createSlice({
  name: 'market',
  initialState: {
    market: null,
    loading: false,
    error: '',
  },
  reducers: {},
  extraReducers: (builder) => {
    builder.addCase(fetchMarketData.pending, (state) => {
        state.loading = true;
        state.error = null;
    })
    builder.addCase(fetchMarketData.fulfilled, (state, action) => {
        state.loading = false;
        state.market = action.payload
    })
    builder.addCase(fetchMarketData.rejected, (state) => {
        state.loading = false;
        state.error = "Request Failed.";
    });
  },
});

其他文件无需修改

store.js和App.jsx的代码是正确的,修正marketSlice.js后,dispatch(fetchMarketData(requestData))会正确触发异步请求,extraReducers中的各个状态分支也能正常捕获请求的pending/fulfilled/rejected状态,更新对应的state。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 12:21:23