javascript - 刷新后将项目添加到本地存储时,我丢失了其他项目

标签 javascript node.js express

当我在刷新后添加一个项目时,其他项目都会丢失,只有在刷新页面后添加的项目仍然存在

我的代码:

let buttonsDom = document.querySelectorAll(elementsStr.itemsBtn)
const buttons = [... buttonsDom]

window.addEventListener('DOMContentLoaded', () => {
    Storage.saveProducts(itemStr)
    let cart = []

    buttons.forEach((btn) => {
        const id = btn.dataset.id;
        if(localStorage.getItem('cart')) {
            if(Storage.findCart(id)){
                btn.innerText = 'in cart';
                btn.disabled = true;
            }
        btn.addEventListener('click', () => {
            btn.innerText = 'in cart';
            btn.disabled = true;
            const cartItem = { ...Storage.findProduct(id), amount:1 }
            cart = [...cart, cartItem]
            Storage.saveCart(cart)

        })
    })  
})

export class Storage {
  static saveProducts(products) {
    localStorage.setItem("items", products);
  }

  static findProduct(id) {
    const products = JSON.parse(localStorage.getItem("items"));

    return products.find((item) => item._id === id);
  }

  static findCart(id) {
    const product = JSON.parse(localStorage.getItem("cart"));

    return product.find((item) => item._id === id);
  }

  static saveCart(cart) {
    localStorage.setItem("cart", JSON.stringify(cart));
  }
}

最佳答案

也许您应该在从 localStorage no 检索它时填写购物车?

let buttonsDom = document.querySelectorAll(elementsStr.itemsBtn)
const buttons = [... buttonsDom]

window.addEventListener('DOMContentLoaded', () => {
    Storage.saveProducts(itemStr)
    let cart = Storage.retrieveCart();  // <---- Here

    buttons.forEach((btn) => {
        const id = btn.dataset.id;
        if(localStorage.getItem('cart')) {
            if(Storage.findCart(id)){
                btn.innerText = 'in cart';
                btn.disabled = true;
            }
        btn.addEventListener('click', () => {
            btn.innerText = 'in cart';
            btn.disabled = true;
            const cartItem = { ...Storage.findProduct(id), amount:1 }
            cart = [...cart, cartItem]
            Storage.saveCart(cart)

        })
    })  
})

export class Storage {
  static saveProducts(products) {
    localStorage.setItem("items", products);
  }

  static findProduct(id) {
    const products = JSON.parse(localStorage.getItem("items"));

    return products.find((item) => item._id === id);
  }

  static findCart(id) {
    const product = JSON.parse(localStorage.getItem("cart"));

    return product.find((item) => item._id === id);
  }

  static saveCart(cart) {
    localStorage.setItem("cart", JSON.stringify(cart));
  }

  static retrieveCart() {                     // <---- Here
    let cart = localStorage.getItem("cart");
    
    if (cart === null) {
         return [];
    }

    try {
       return JSON.parse(cart);
    } catch(e) {
         return [];
    }
  }
}

关于javascript - 刷新后将项目添加到本地存储时,我丢失了其他项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63055751/

相关文章:

node.js - 客户端未通过 IIS Node 从 SocketIO 接收事件

javascript - 使用 Jquery 设置 CSS 宽度时边框半径发生变化

javascript - 你能增加 meteor 中的 react 变量吗?

node.js - 尝试解密使用密码保护的私钥

javascript - Express 中间件中丢失 ajax 数据

node.js - 请在node.js中验证我在Redis,Socke.io上的方法

node.js - 在 firebase 函数中,获取当前的 https ://domain part

javascript - 将两个下拉列表的选定值发送到 PHP 脚本,而不使用 AJAX 提交

javascript - dc.js - 在一组中一起渲染两个对象(一个图表 - 渲染,一个形状 - 不渲染)?

javascript - Amazon DynamoDB DocumentClient().get() 使用函数外的值