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

React+Redux如何解决Unhandled Rejection: Actions must be plain objects报错

Redux dispatch时报错"Actions must be plain objects. Use custom middleware for async actions." 解决方案

错误核心原因

传入dispatch的参数不是纯JavaScript对象,或Redux中间件未正确配置生效,是导致该报错的两类核心原因。结合你提供的代码,具体问题和修复步骤如下:


排查修复步骤

1. 优先检查同名函数导入错误

你在action定义文件和saga文件中都导出了名为lancarSumario的函数:

  • action文件中的lancarSumario是合法的action creator,返回纯对象,符合dispatch要求
  • saga文件中的lancarSumario是Generator函数,若误导入组件用于dispatch,就会直接触发该报错

请确认触发dispatch的组件中,导入路径指向的是action定义文件,而非saga文件,示例正确导入写法:

// 路径替换为你实际存放sumario action的文件路径
import { lancarSumario } from '@/store/modules/sumario/actions';

2. 修复store配置重复问题

你提供的代码中,createStore配置文件与createStore目录下的index.js内容完全重复,会导致循环引入、store重复初始化的问题,删掉其中一份,统一store的初始化入口即可。

3. 检查自定义createStore的中间件应用逻辑

你封装的自定义createStore函数必须正确调用Redux原生的applyMiddleware方法,才能让saga中间件生效,参考正确的封装写法:

// createStore目录下的createStore.js
import { createStore, applyMiddleware } from 'redux';

export default (reducers, middlewares) => {
  const enhancer = applyMiddleware(...middlewares);
  return createStore(reducers, enhancer);
};

4. 可选:排查rootSaga注册逻辑

若修复以上问题后saga逻辑不执行,请检查./modules/rootSaga.js是否正确引入并注册了sumario模块的saga:

import { all } from 'redux-saga/effects';
import sumarioSaga from './sumario/sagas'; // 替换为实际路径

export default function* rootSaga() {
  return yield all([sumarioSaga]);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:27:01