我们可以通过redux工具包中的切片的命名导出来导出reducer吗?

问题描述 投票:0回答:2

我正在通过切片中的命名导出来导出我的减速器,但它在商店中未正确接收,并且我看到以下错误

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;

注意:对于初学者来说这是一个复杂的概念,所以要有礼貌,不要降低问题的级别,请尝试用简单的语言来阐述这个概念。

reactjs redux react-redux redux-toolkit
2个回答
0
投票

我尝试了一种稍微不同的方法,只是删除了导出语句中的大括号 {},错误就消失了。

export const cartReducer = cartSlice.reducer;

0
投票

发生错误是因为您在

cartSlice.js
中写入了这一行。

export const {cartReducer} = cartSlice.reducer;

cartSlice.reducer
返回一个reducer 对象,然后将该对象提供给store。但您不是直接导出它,而是尝试解构该对象(并且它也没有 cartReducer 属性来解构)。因此你应该将其替换为行

export const cartReducer = cartSlice.reducer;

这可确保您导出整个减速器对象,而不包含其单独的属性。

© www.soinside.com 2019 - 2024. All rights reserved.