Push 不是 redux 中的函数

AsZ*_*Zik 0 redux react-redux

我使用 redux 编写了一个简单的添加到购物车功能。当我尝试将产品添加到数组时,它会抛出错误:

state.products.push 不是一个函数。

初始状态

export const INITIAL_STATE = {
  products: []
};
Run Code Online (Sandbox Code Playgroud)

我使用 redux-sauce 来调度该操作。

减速器

export const AddToCart = (state, { item }) => ({
  ...state,
  products: state.products.push(item),
});
Run Code Online (Sandbox Code Playgroud)

Lin*_*ste 9

这里的主要问题是您将 的值设置state.products为 的返回值push()push()方法不返回数组。它会改变数组(您不应该在 Redux 中这样做),并返回新的 length。调用此减速器后,您的state.products属性将从数组更改为number.

您可以使用concat()代替。此方法返回一个新数组,其中附加了项目。它不会修改原始数组,因此它是 Redux 安全的。

我对 redux-sauce 不太熟悉,但似乎你需要state = INITIAL_STATE在每个 case 减速器上都包含它。

export const AddToCart = (state = INITIAL_STATE, { item }) => ({
  ...state,
  products: state.products.concat(item),
});
Run Code Online (Sandbox Code Playgroud)