我正在React和Node js中建立一个电子商务网站。我在本地存储和购物车上遇到麻烦。我有一些字段已经添加到本地存储中(大小和完成),您可以在产品页面上选择这些字段:
这是具有该功能的产品的示例:
http://157.245.95.222/product/5d3f2a189330283e54b41a66
这是将商品添加到购物车的功能。
export const addItem = (item, count, finish, size, next) => {
let cart = []
if (typeof window !== 'undefined') {
if(localStorage.getItem('cart')) {
cart = JSON.parse(localStorage.getItem("cart"))
}
cart.push({
...item,
count: count,
finish: finish,
size: size
})
cart = Array.from(new Set(cart.map(p => p._id))).map(id => {
console.log(cart)
return cart.find(p => p._id === id)
})
localStorage.setItem("cart", JSON.stringify(cart))
next()
}
}
但是,addItem函数中的代码块:
cart = Array.from(new Set(cart.map(p => p._id))).map(id => {
console.log(cart)
return cart.find(p => p._id === id)
})
阻止您添加相同项目的将覆盖具有相同产品ID的项目。 (如果选择“ Honed Arabescato”并将其添加到购物车中,然后返回并选择“ Polished Arabescato”,则只会看到抛光版本)。我试图弄清楚如何将两者都添加到购物车中。如果我将上面的代码^注释掉,则同一项目多次添加到购物车,并且所有这些覆盖都发生了。我将如何为购物车添加不同的版本?
我的代码可以在这里看到: (前端) https://github.com/Arunscape224/sgi_4.0_client (后端) https://github.com/Arunscape224/sgi_4.0
我尝试注释掉新的Set,因为这仅允许将该产品的一个副本添加到购物车数组中。理想情况下,我希望能够将具有不同饰面的相同产品添加到购物车。
export const addItem = (item, count, finish, size, next) => {
let cart = []
if (typeof window !== 'undefined') {
if(localStorage.getItem('cart')) {
cart = JSON.parse(localStorage.getItem("cart"))
}
cart.push({
...item,
count: count,
finish: finish,
size: size
})
cart = Array.from(new Set(cart.map(p => p._id))).map(id => {
console.log(cart)
return cart.find(p => p._id === id)
})
localStorage.setItem("cart", JSON.stringify(cart))
next()
}
}
通过注释addItem函数中的Array.from块,我希望将产品的不同版本添加到购物车中。我没想到它会覆盖购物车中的产品。
答案 0 :(得分:0)
我看不到您在哪里设置ID字段。唯一的匹配是否可能是null === null?