我在本地存储中添加的其他字段在购物车中被覆盖

时间:2019-09-18 16:50:43

标签: javascript node.js reactjs local-storage e-commerce

我正在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块,我希望将产品的不同版本添加到购物车中。我没想到它会覆盖购物车中的产品。

1 个答案:

答案 0 :(得分:0)

我看不到您在哪里设置ID字段。唯一的匹配是否可能是null === null?