Redux Store报错:无有效Reducer(combineReducers使用问题)
问题原因与解决方案
错误原因
你在userSlice.js中默认导出了整个createSlice返回的slice对象,但combineReducers要求传入的对象值必须是reducer函数,而非slice对象,这就导致store无法识别有效的reducer,从而抛出错误。
修复步骤
1. 修改userSlice.js的导出
将默认导出从整个slice对象改为slice内部的reducer属性:
import { createSlice } from "@reduxjs/toolkit"; const initialState = { loginState: false, accessToken: "", userId: "", }; const userSlice = createSlice({ name: "userReducer", initialState, reducers: { setLogin: (state, action) => { state.loginState = true; state.accessToken = action.payload; }, }, }); export const { setLogin } = userSlice.actions; // 改为导出reducer属性 export default userSlice.reducer;
2. 简化store.js代码(可选但推荐)
Redux Toolkit的configureStore会自动帮你合并reducers,不需要手动调用combineReducers,直接传入reducer对象即可:
import { configureStore } from "@reduxjs/toolkit"; // 导入时可以给reducer起个更清晰的名字 import userReducer from "./slices/userSlice"; const store = configureStore({ reducer: { user: userReducer // 这里的key是state中的命名空间,比如state.user }, }); export default store;
如果坚持使用combineReducers,修改store.js中导入的reducer后也能正常工作:
import { configureStore, combineReducers } from "@reduxjs/toolkit"; import userReducer from "./slices/userSlice"; const rootReducer = combineReducers({ user: userReducer, }); const store = configureStore({ reducer: rootReducer, }); export default store;
内容的提问来源于stack exchange,提问作者skwFE
相关产品推荐
相关产品推荐

