React-Redux开发计数器触发TypeError:DEC_NUM不是函数问题求助
报错根因
该错误由ES模块的导出、导入语法不匹配导致:
- 你在
Action/index.js中使用export default导出了一个包含INC_NUM、DEC_NUM两个方法的对象 - 但在
App.js中使用了import { INC_NUM, DEC_NUM } from "./Action/index"的命名导入语法,该语法只会读取模块的命名导出项,无法读取默认导出对象上的属性 - 最终导入的
DEC_NUM实际为undefined,调用时就会触发「不是函数」的报错
修复方案
以下两种方案二选一即可:
方案1:修改Action模块的导出语法(推荐)
将Action/index.js的默认导出改为命名导出,不需要改动其他文件的导入逻辑:
// Action/index.js 修改后代码 export const INC_NUM = () => { return { type: "INC_NUMBER" }; }; export const DEC_NUM = () => { return { type: "DEC_NUMBER" }; }; // 删除原来的 export default { INC_NUM, DEC_NUM } 代码
方案2:修改App.js的导入语法
如果不改动Action模块的导出逻辑,把App.js的导入逻辑改为匹配默认导出即可:
// App.js 修改后导入代码 import ActionObj from "./Action/index"; const { INC_NUM, DEC_NUM } = ActionObj;
额外优化提示
你当前的counterReducer只打印了日志,没有返回新的状态值,计数器不会正常更新,可按如下逻辑修改:
const counterReducer = (state = 1, action) => { if (action.type === "INC_NUMBER") { return state + 1; } else if (action.type === "DEC_NUMBER") { return state - 1; } return state; };
内容的提问来源于stack exchange,提问作者Rishabh Pagaria
相关产品推荐
相关产品推荐

