使用 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"
}
我正在尝试设置一个精确值,存储在数组中,该数组存储在我的状态对象中,全部在 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"
}