配置redux-thunk后Redux调用get action仍报Actions must be plain objects错误如何解决
问题根因
你的Redux thunk配置完全正确,报错是因为get这个action creator存在部分执行分支无返回值的问题,dispatch时拿到的内容是undefined,Redux原生要求action必须是纯对象,thunk中间件只会处理函数类型的返回值,undefined不符合任何规则,直接触发类型校验报错。
具体错误点
看get函数的三个执行分支:
- 第一个判断分支
if (students && students.all.length > 0),仅调用了getCurrent(),没有将生成的action对象返回 - 最后的else分支,同样仅调用
getCurrent(),无返回值 - 同时存在逻辑重复的问题,两次判断的条件可以合并简化
修复方案
修改student.js的action代码里的get函数,确保所有分支都有返回值:
export const get = (students, teacherId) => { // 已存在学生数据 直接返回获取当前数据的action if (students && students.all.length > 0) { return getCurrent(); } // 无数据时返回thunk异步函数 return async(dispatch) => { let result = await functions.get(teacherId); dispatch(fill(result)); } }
修改后所有执行分支要么返回普通action对象,要么返回thunk异步函数,完全符合Redux的校验要求,报错即可解决。
内容的提问来源于stack exchange,提问作者Pessi S.
相关产品推荐
相关产品推荐

