React Native Redux报错:TypeError: combineReducers不是函数求助
错误原因与解决办法
错误根源
- 冗余导入与模块冲突:你在
store.js中导入了redux包的combineReducers但未使用,而Redux Toolkit(@reduxjs/toolkit)已经内置该工具函数,单独导入redux包的版本可能与Toolkit内部依赖的版本存在冲突,导致模块解析异常。 - 依赖版本不精确:
react-redux指定的版本为"8.0",属于模糊版本号,可能安装的版本与redux@4.0.5、@reduxjs/toolkit@1.8.5存在兼容性问题,引发函数未定义的错误。 - 项目重命名后的缓存问题:重命名项目后,Expo的缓存可能残留旧的模块映射,导致导入路径或模块识别错误。
解决步骤
1. 清理冗余导入
修改store.js,删除未使用的combineReducers导入(configureStore会自动处理reducer合并):
// store.js import { configureStore } from "@reduxjs/toolkit"; import taskReducer from './taskSlice' // 移除这一行:import { combineReducers } from 'redux' export default configureStore({ reducer:{ tasks:taskReducer } })
2. 修复依赖版本
修改package.json中的react-redux版本为精确兼容的版本(与@reduxjs/toolkit@1.8.5匹配的8.0.2):
"dependencies": { // ...其他依赖 "react-redux": "8.0.2", // ...其他依赖 }
执行依赖更新命令:
npm install # 若使用yarn则执行:yarn install
3. 清理Expo缓存
执行以下命令清除Expo的缓存,确保模块重新正确解析:
expo r -c
额外优化建议
你的taskSlice.js中addTask的name字段错误赋值为action.payload.id,建议修正为:
addTask:(state,action) => { const newTask = { id:action.payload.id, name:action.payload.name, // 改为传入的name值 }; state.push(newTask) },
内容的提问来源于stack exchange,提问作者Sheran Malik
相关产品推荐
相关产品推荐

