报错:Store无有效reducer,传入combineReducers的参数需为合法对象
问题解决:Store does not have a valid reducer
错误原因
你传入configureStore的reducer是一个空对象{},Redux要求根reducer必须包含至少一个有效的reducer函数,combineReducers会严格校验传入对象的每个值都是合法reducer,空对象不满足这个要求,因此触发报错。
解决方法
方法1:添加占位reducer(适合暂时无实际reducer的场景)
先定义一个最简单的占位reducer,再传入configureStore:
// 占位reducer,返回默认状态 const placeholderReducer = (state = {}, action) => state; function configureStore_a() { const store: any = configureStore({ reducer: { // 加入占位reducer,满足Redux的最少reducer要求 placeholder: placeholderReducer }, }); store.ascReducers = {}; return store; }
方法2:正确实现动态添加reducer(若需后续注入reducers)
如果是想后续动态添加reducers,不要手动添加ascReducers,用Redux Toolkit自带方式实现:
import { configureStore, combineReducers } from '@reduxjs/toolkit'; // 初始根reducer,包含一个占位 const initialRootReducer = combineReducers({ placeholder: (state = {}, action) => state }); function configureStore_a() { const store = configureStore({ reducer: initialRootReducer, }); // 自定义注入reducer的方法 store.injectReducer = (key: string, reducer: any) => { // 合并现有reducer与新reducer,替换根reducer const newRootReducer = combineReducers({ ...store.getState(), [key]: reducer }); store.replaceReducer(newRootReducer); }; return store; }
关键说明
- Redux核心是用reducer管理状态,哪怕是占位的空reducer,也必须至少存在一个,否则Store无法初始化。
- 不要直接给store添加自定义属性(比如
ascReducers),扩展store功能请遵循Redux官方推荐方式。
内容的提问来源于stack exchange,提问作者Shivam Singh
相关产品推荐
相关产品推荐

