React Redux导入报错:./Reducers未导出rootReducer
解决Redux导入rootReducer报错:"./Reducers' does not contain an export named 'rootReducer'"
这个错误的核心原因有两个:一是你的./Reducers目录没有统一的入口文件来导出合并后的rootReducer;二是你现有的单个reducer是默认导出,并没有被组合成Redux要求的根reducer。
下面是具体的修复步骤:
步骤1:在Reducers目录下创建入口文件index.js
Redux需要将所有子reducer合并为一个根reducer(rootReducer),我们需要在Reducers文件夹里新建index.js来完成合并:
// ./Reducers/index.js import { combineReducers } from 'redux'; // 导入订单模块的reducer(默认导出可以自定义变量名) import placeOrderReducer from './Reducer_placeorder'; // 合并所有reducer,对象的key对应store中state的属性名 const rootReducer = combineReducers({ placeOrder: placeOrderReducer }); // 导出根reducer(默认导出方式) export default rootReducer;
步骤2:调整主index.js的导入语句
根据上面的导出方式,修改主文件的导入逻辑:
- 如果用的是默认导出(上面的代码),把主index.js的导入改成:
// 项目根目录的index.js import rootReducer from './Reducers'; // 导入目录会自动加载目录下的index.js默认导出
- 如果你偏好命名导出,可以把Reducers/index.js的导出改为:
export const rootReducer = combineReducers({...});
这样你原来的import { rootReducer } from './Reducers';就能正常使用了。
为什么会出现这个报错?
- 你直接从
./Reducers目录导入rootReducer,但该目录没有index.js作为入口时,打包工具无法确定要加载哪个文件; - 你的
Reducer_placeorder.js用的是export default,它导出的是一个匿名函数,并非名为rootReducer的命名导出项,所以就算直接导入该文件,也找不到rootReducer。
内容的提问来源于stack exchange,提问作者Dinil At
相关产品推荐
相关产品推荐

