Redux报错TypeError: store.getState is not a function 排查解决
报错根因
报错的核心原因是store的导出、传入方式不符合Redux接入要求:
你当前的代码默认导出的是一个返回普通对象的箭头函数,不是Redux store实例本身,在入口通过<Provider>传入的value根本不具备Redux store内置的getState、dispatch等实例方法,自然会抛出store.getState is not a function的错误。
当前导出逻辑存在两层问题:
- 把创建store的逻辑包在匿名箭头函数里导出,导入时如果不手动执行这个函数,拿到的只是函数类型的值,不可能是store实例
- 就算执行了这个函数,返回的是结构为
{ store: 实际store实例 }的普通JS对象,把这个对象直接传给Provider,Provider识别不到合法的store实例
修复方式
根据你是否需要用到代码里已经导入但未配置的redux-persist持久化能力,选对应方案修改即可:
方案1:暂不使用持久化,直接导出store实例
删掉store文件末尾原来的函数式导出逻辑,替换为直接创建、导出实例的写法:
// 删掉原来的 export default () => { ... } 这段 const store = createStore(rootReducer, initialState, applyMiddleware(...middleWare)); export default store;
在项目入口文件中导入store,传入Provider即可:
import { Provider } from 'react-redux'; import store from './store文件的相对路径'; export default function Root() { return ( <Provider store={store}> {/* 你的应用根组件、路由配置 */} </Provider> ) }
方案2:启用redux-persist本地状态持久化
你代码里已经导入了persist相关依赖但没写配置,补全逻辑后正确导出store和persistor:
// 补全持久化配置 const persistConfig = { key: 'root', storage: AsyncStorage, // 配置需要持久化的reducer,对应你combineReducers里的key whitelist: ['Reducer'] } // 用持久化reducer包装根reducer const persistedReducer = persistReducer(persistConfig, rootReducer) // 创建store实例 const store = createStore(persistedReducer, initialState, applyMiddleware(...middleWare)); // 创建持久化实例 const persistor = persistStore(store); export { store, persistor };
入口文件需要同时引入PersistGate做持久化加载拦截:
import { Provider } from 'react-redux'; import { PersistGate } from 'redux-persist/integration/react'; import { store, persistor } from './store文件的相对路径'; export default function Root() { return ( <Provider store={store}> <PersistGate loading={null} persistor={persistor}> {/* 你的应用根组件、路由配置 */} </PersistGate> </Provider> ) }
额外提醒
- 不需要额外给
createStore传空对象initialState,各个reducer自己定义的初始状态会自动生效,多余的全局初始值反而可能覆盖reducer的默认状态。 - 不需要的冗余导入(比如暂时不用persist的时候导入的persist相关包)及时删掉,避免增加不必要的打包体积。
内容的提问来源于stack exchange,提问作者user19288163
相关产品推荐
相关产品推荐

