使用 immutability-helper 更新 redux 状态时出错

Error while updating redux state using immutability-helper

我正在尝试设置一个精确值,存储在数组中,该数组存储在我的状态对象中,全部在 redux 中。

const initialState = {
    orderedItems: [
    {item:"1Reco",price:"12",amount:1},
    {item:"2Reco",price:"12",amount:1},
    ],
    fullPrice: 0,
    windowWidth: 1418,
    language: "en"
};

假设 2Reco 等于 2。 我一直在尝试这样使用更新和 $set:

let newamount = state.orderedItems[i].amount+1;
return update(state, { 
    orderedItems: { 
        [i]: {
            amount: {$set:newamount}
      }
    },fullPrice: newPrice
  });

但是当此更新启动时,我收到“错误:update():您为 update() 提供的规范无效。”回来了,不知道为什么。我之前在堆栈上看到过类似的解决方案,但它们似乎对我不起作用。当控制台记录时,newamount 显示数字 2,这正是我想在那个地方设置的。有什么问题?

虽然这不是您问题的直接答案,但我会强烈建议使用 Immer 来编写不可变更新而不是 immutability-helper 库:

https://immerjs.github.io/immer/docs/introduction

代码会简单很多。

此外,our official Redux Toolkit package内部已经使用了 Immer,您应该使用 Redux Toolkit 来编写您的 Redux 逻辑。

您正在直接改变状态。在 Redux 的一般情况下,您必须 ... operator。像这样:

为了

orderedItems: [
  {item:"1Reco",price:"12",amount:1},
  {item:"2Reco",price:"12",amount:1},
],

尝试

const updatedOrderedItems = orderedItems.map(obj=>{
                if(obj.item==="2Reco"){
                    obj.amount=obj.amount+1;
                    return obj; 
                }
                return obj;
});

现在您的 updatedOrderedItems 包含更新的对象数组,其中包含第二个对象的数量 2。

然后您可以从您的 reducer 函数更新 redux 中的全局状态,如下所示:

return{
  ...state,
    orderedItems: updatedOrderedItems 
    fullPrice: 0,
    windowWidth: 1418,
    language: "en"
   
}