React Redux报错:Actions不能包含未定义的type属性求助
问题根源与解决方案
核心错误点
initializedSuccessaction creator 定义错误
你把它写成了thunk函数格式(接收dispatch参数),但它应该是返回普通action对象的creator。同时,action里的type值用了下划线的'INITIALIZED_SUCCESS',和你定义的常量INITIALIZED_SUCCESS = "INITIALIZED-SUCCESS"(横杠)不匹配,这会导致reducer无法识别该action。Thunk函数内的dispatch调用错误(若取消注释代码)
注释掉的dispatch(getAuthUserDataThunk)和dispatch(initializedSuccess)都是直接传递函数本身,而非调用函数后返回的结果。即使有thunk中间件,getAuthUserDataThunk作为thunk函数也需要调用才能生成可被dispatch的函数;initializedSuccess作为普通action creator,必须调用才能返回带type的action对象。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;
验证修正效果
- 修正后,
initializeAppThunk会正确调用auth相关的thunk,完成后dispatch合法的initializedSuccessaction。 - Reducer会根据正确的action type更新
isInitialized状态,不会再出现"undefined type"的错误。
内容的提问来源于stack exchange,提问作者Den Zhatov
相关产品推荐
相关产品推荐

