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

React Redux报错:Actions不能包含未定义的type属性求助

问题根源与解决方案

核心错误点

  1. initializedSuccess action creator 定义错误
    你把它写成了thunk函数格式(接收dispatch参数),但它应该是返回普通action对象的creator。同时,action里的type值用了下划线的'INITIALIZED_SUCCESS',和你定义的常量INITIALIZED_SUCCESS = "INITIALIZED-SUCCESS"(横杠)不匹配,这会导致reducer无法识别该action。

  2. Thunk函数内的dispatch调用错误(若取消注释代码)
    注释掉的dispatch(getAuthUserDataThunk)和dispatch(initializedSuccess)都是直接传递函数本身,而非调用函数后返回的结果。即使有thunk中间件,getAuthUserDataThunk作为thunk函数也需要调用才能生成可被dispatch的函数;initializedSuccess作为普通action creator,必须调用才能返回带type的action对象。

  3. Reducer的默认action参数不合理
    你给reducer的action参数设置了默认值{ type:INITIALIZED_SUCCESS },这会导致reducer初次执行时就触发INITIALIZED_SUCCESS分支,不符合初始化逻辑。


修正后的代码

app-reducer.js

import getAuthUserDataThunk from './auth-reducer';
    
const INITIALIZED_SUCCESS = "INITIALIZED-SUCCESS";
   
let inicialState = {
  isInitialized: false
}

// 移除action的默认参数,恢复规范写法
const appReducer = (state = inicialState, action) => {
  switch(action.type) {
    case INITIALIZED_SUCCESS: {
      return {
        ...state,
        isInitialized: true
      }
    }

    default: {
      return state;
    }
  }
};

// 修正为普通action creator,使用定义好的常量
export const initializedSuccess = () => ({
  type: INITIALIZED_SUCCESS
});

// 添加async关键字(因为用到await),并修正dispatch调用
export const initializeAppThunk = () => async (dispatch) => { 
  debugger;
  // 调用thunk函数,传入dispatch
  await dispatch(getAuthUserDataThunk());
  // 调用action creator,返回action对象再dispatch
  dispatch(initializedSuccess());
};

export default appReducer;

验证修正效果

  1. 修正后,initializeAppThunk会正确调用auth相关的thunk,完成后dispatch合法的initializedSuccess action。
  2. Reducer会根据正确的action type更新isInitialized状态,不会再出现"undefined type"的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 04:12:42