Redux Action需为纯对象:getResult分发问题咨询
问题排查与解决
你遇到的问题根源在于getResult这个Action创建函数的写法不符合Redux对Action的要求,而且箭头函数的语法在这里用错了。
问题分析
Redux要求Action必须是纯对象,但你的getResult函数:
export const getResult = () => { type: 'GET_RESULT' }
这里的大括号{}会被JavaScript解析为函数体的代码块,而不是对象字面量。里面的type: 'GET_RESULT'其实是一个无效的标签语句,这个函数最终会返回undefined,而不是一个符合要求的Action对象——这就是分发时出现问题的原因。
对比你其他正确的Action创建函数(比如addTodo),它们都用小括号()包裹了返回的对象,这样JavaScript才会把它解析成对象字面量,而不是代码块:
export const addTodo = text => ({ type: 'ADD_TODO', id: nextTodoId++, text })
修正方案
你有两种方式修复getResult:
- 用小括号包裹对象字面量(推荐,和你其他Action的写法保持一致):
export const getResult = () => ({ type: 'GET_RESULT' })
- 在函数体内明确使用
return返回对象:
export const getResult = () => { return { type: 'GET_RESULT' } }
修正后,getResult会返回一个标准的Redux Action对象,分发时就不会再出现问题了。
内容的提问来源于stack exchange,提问作者Aessandro
相关产品推荐
相关产品推荐

