【发布时间】:2019-03-05 11:58:15
【问题描述】:
我有一个这种形式的状态树:
const initialState = {
total: 0,
discount: 0,
typeDiscount: 0,
products: data
};
其中products字段是一个数组,数组是这样的:
[{
"id":9090,
"name":"Item1",
"price":200,
"discount":10,
"type":"fiction",
"quantity": 1,
"img_url":"https://store.lexisnexis.com.au/__data/media/catalog/thumb//placeholder.jpg"
},
{
"id":9091,
"name":"Item2",
"price":250,
"discount":15,
"type":"literature",
"quantity": 1,
"img_url":"https://store.lexisnexis.com.au/__data/media/catalog/thumb//placeholder.jpg"
}]
现在我正在尝试更改该数组中的数量,我是 Redux 的新手,所以请指导我如何做到这一点?
这是我的减速器:
case types.ADD_ITEM_CART:
let product_add = state.products
for (let i = 0; i < product_add.length; i++) {
if (product_add[i].id === action.id) {
product_add[i].quantity = product_add[i].quantity + 1
break
}
}
return dotProp.set(state, `products`, product_add);
【问题讨论】:
-
你想改变哪个对象的数量?
-
在initialState对象的product字段中我想改变数量。
-
不要像这样改变你的状态,有更好的方法。所以,你有一个来自你的动作有效载荷的
id,对吧?那你想把数量加一吗? -
是的,没错。我怎么做?我是新手,我总是对此感到困惑。
-
你需要用 product_add 的新产品覆盖 state 中的产品所以 return {...state, product: product_add} 如果你想遵循 redux 的方式,你必须深入从状态复制(让 product_add = {...state.products } 为你的情况)而不是复制引用所以原始数据是不可变的,记住状态是不可变的所以只复制和覆盖
标签: javascript reactjs redux