【发布时间】:2019-01-09 12:46:25
【问题描述】:
我试图在电子商务应用程序中实现本地购物车,所以我有一些类似的产品,每个产品都是一个看起来像这样的对象:
[
{ prodId: 1, count: 1 },
{ prodId: 2, count: 1 },
{ prodId: 3, count: 1 },
and so onn...
]
现在,如果用户第一次添加产品,它会完美地添加到本地存储中并完美呈现在购物车屏幕上,我所做的就是将该对象存储在本地存储中的 json 字符串中。
此外,如果用户添加具有不同 productId 的产品,它也能正常工作。
但是如果用户再次添加相同的产品,它已经存在于购物车中,我只想增加该 productId 的计数。
async btnPressed() {
const item = await AsyncStorage.getItem("obj");
let val = JSON.parse(item);
if (val === null) { //Adding a product for first time
await AsyncStorage.removeItem("obj");
let newVal = [];
let count = { counter: 1 };
let newObj = Object.assign(count, this.props.obj);
newVal.push(newObj);
await AsyncStorage.setItem("obj",
JSON.stringify(newVal));
ToastAndroid.showWithGravity(
"Product added to cart!",
ToastAndroid.SHORT,
ToastAndroid.CENTER
);
} else {
//Product is already present, increasing count here
val.some(element => {
if (element.ProductID === this.props.obj.ProductID) {
AsyncStorage.removeItem("obj").then(() => console.warn("in val some"));
val.pop(element);
console.warn(val);
element.counter = element.counter + 1;
val.push(element);
console.warn(val);
AsyncStorage.setItem("obj", JSON.stringify(val)).then(() => console.warn("Done"));
ToastAndroid.showWithGravity(
"Product added to cart!",
ToastAndroid.SHORT,
ToastAndroid.CENTER
);
return true;
}
});
// Adding a new product with different productID
const checkObj = await AsyncStorage.getItem('obj');
let fetchedObj = JSON.parse(checkObj);
if(fetchedObj === null) {}
let count = { counter: 1 };
let newObj = Object.assign(count, this.props.obj);
console.warn(val);
await AsyncStorage.removeItem("obj");
val.push(newObj);
await AsyncStorage.setItem("obj", JSON.stringify(val))
ToastAndroid.showWithGravity(
"Product added to cart!",
ToastAndroid.SHORT,
ToastAndroid.CENTER
);
}
}
我的逻辑是正确的还是我做错了什么?
【问题讨论】:
标签: javascript arrays reactjs react-native