我正在通过切片中的命名导出来导出我的减速器,但它在商店中未正确接收,并且我看到以下错误
No reducer provided for key "cart"
Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.
。
尽管如此,通过默认导出完成时它是有效的。
这是我的代码:
cartSlice.js:
import { createSlice } from "@reduxjs/toolkit";
const cartSlice = createSlice({
name: "cart",
initialState: [],
reducers: {
add(state, action) {
state.push(action.payload);
},
addAll(state, action) {
return [...state, ...action.payload];
},
remove(state, action) {
state = state.filter((item) => item.id !== action.payload);
},
},
});
export const { add, addAll, remove } = cartSlice.actions;
export const {cartReducer} = cartSlice.reducer;
store.js:
import { cartReducer } from "./cartSlice";
import { configureStore } from "@reduxjs/toolkit";
const store = configureStore({
reducer: {
cart: cartReducer,
},
});
export default store;
注意:对于初学者来说这是一个复杂的概念,所以要有礼貌,不要降低问题的级别,请尝试用简单的语言来阐述这个概念。
我尝试了一种稍微不同的方法,只是删除了导出语句中的大括号 {},错误就消失了。
export const cartReducer = cartSlice.reducer;
发生错误是因为您在
cartSlice.js
中写入了这一行。
export const {cartReducer} = cartSlice.reducer;
cartSlice.reducer
返回一个reducer 对象,然后将该对象提供给store。但您不是直接导出它,而是尝试解构该对象(并且它也没有 cartReducer 属性来解构)。因此你应该将其替换为行
export const cartReducer = cartSlice.reducer;
这可确保您导出整个减速器对象,而不包含其单独的属性。