需要在我的反应状态对象上添加数量
Need to add quantity on my react state object
我遇到了一个问题,我正在用一个对象数组更新 React 状态,我的原始对象是这样的。
[{id:"123", name:"Product 1"}, {id:"456", name:"Product 2"}];
假设这是一个电子商务购物车列表,现在如果我再次添加相同的产品,'id' 属性 对于每个产品都是唯一的,它应该会增加该产品的数量。
我需要这个[[{id:"123", name:"Product 1 , quantity: 2"}, {id:"456", name:"Product 2"}];]
相反,我得到这样的状态,
[{id:"123", name:"Product 1"}, {id:"456", name:"Product 2"},{id:"123", name:"Product 1"} ];
我不希望数组中的第三项,我希望它增加数量 属性,这在之前的对象上也是不可用的。
我正在使用 React hooks
请帮忙。提前致谢。
您需要根据id在cart数组中找到商品的索引,然后更新数量,或者设置为1作为初始值。
我添加了一个小示例,但您可以将其改编为挂钩代码。
let cart = [{id:"123", name:"Product 1"}, {id:"456", name:"Product 2"}];
let newCart = JSON.parse(JSON.stringify(cart))
let index = newCart.findIndex(obj => obj.id === "123")
if (index >= 0) {
newCart[index].quantity = (newCart[index].quantity | 0) + 1
}
console.log(newCart)
使用 map()
遍历现有状态并在 id 与输入匹配时更新对象。
const state = [
{ id: "123", name: "Product 1" },
{ id: "456", name: "Product 2" },
];
setState = (_state) =>
state.map((item) =>
item.id === _state.id
? { ...item, quantity: item["quantity"] + 1 || 2 }
: item
);
const newState = setState({ id: "123", name: "Product 1" });
console.log(newState);
我在发布问题后尝试了这个,它成功了。
const addToCart = (productToAdd) => {
const present = cartItem.some((prod) => {
return prod.id === productToAdd.id;
});
if (!present) {
productToAdd["quantity"] = 1;
setcartItem((prev) => {
return [...prev, productToAdd];
});
} else {
setcartItem((prev) => {
prev.map((prod) => {
if (prod.id === productToAdd.id) {
prod.quantity++;
}
});
return [...prev];
});
}
};
我遇到了一个问题,我正在用一个对象数组更新 React 状态,我的原始对象是这样的。
[{id:"123", name:"Product 1"}, {id:"456", name:"Product 2"}];
假设这是一个电子商务购物车列表,现在如果我再次添加相同的产品,'id' 属性 对于每个产品都是唯一的,它应该会增加该产品的数量。
我需要这个[[{id:"123", name:"Product 1 , quantity: 2"}, {id:"456", name:"Product 2"}];]
相反,我得到这样的状态,
[{id:"123", name:"Product 1"}, {id:"456", name:"Product 2"},{id:"123", name:"Product 1"} ];
我不希望数组中的第三项,我希望它增加数量 属性,这在之前的对象上也是不可用的。
我正在使用 React hooks
请帮忙。提前致谢。
您需要根据id在cart数组中找到商品的索引,然后更新数量,或者设置为1作为初始值。
我添加了一个小示例,但您可以将其改编为挂钩代码。
let cart = [{id:"123", name:"Product 1"}, {id:"456", name:"Product 2"}];
let newCart = JSON.parse(JSON.stringify(cart))
let index = newCart.findIndex(obj => obj.id === "123")
if (index >= 0) {
newCart[index].quantity = (newCart[index].quantity | 0) + 1
}
console.log(newCart)
使用 map()
遍历现有状态并在 id 与输入匹配时更新对象。
const state = [
{ id: "123", name: "Product 1" },
{ id: "456", name: "Product 2" },
];
setState = (_state) =>
state.map((item) =>
item.id === _state.id
? { ...item, quantity: item["quantity"] + 1 || 2 }
: item
);
const newState = setState({ id: "123", name: "Product 1" });
console.log(newState);
我在发布问题后尝试了这个,它成功了。
const addToCart = (productToAdd) => {
const present = cartItem.some((prod) => {
return prod.id === productToAdd.id;
});
if (!present) {
productToAdd["quantity"] = 1;
setcartItem((prev) => {
return [...prev, productToAdd];
});
} else {
setcartItem((prev) => {
prev.map((prod) => {
if (prod.id === productToAdd.id) {
prod.quantity++;
}
});
return [...prev];
});
}
};