You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue 3中向对象数组添加对象并保存Cookie时出现替换问题求助

Vue3 + Vuetify 购物车Cookie数据被替换而非追加的解决办法

问题场景

我在使用Vue3和Vuetify开发时,尝试将商品对象添加到购物车列表并保存到Cookie中,但每次添加新商品时,Cookie里的数组都会被替换成仅包含当前商品的新数组,无法实现追加效果。

模板代码:

<a to="#" data-toggle="tooltip" data-placement="top" title="Add to cart"
   @click.stop.prevent="handleAddToCart(product)">
  <v-icon class="icon-bag2">mdi-medical-bag</v-icon>
</a>

注:由于图标位于可点击div内,使用了stop.prevent修饰符阻止事件冒泡和默认行为。

原逻辑代码:

data() {
  return {
    productList: []
  }
},
methods: {
  handleAddToCart(product) {
    this.productList.push(product)
    console.log('product list', this.productList)
    this.$cookies.set('cart', JSON.stringify(this.productList))
  }
}

问题原因

核心问题是**productList初始化时未读取Cookie中已有的购物车数据**:每次页面刷新或组件初始化时,productList都会被重置为空数组,点击添加商品时只是在空数组中push当前商品,再将这个仅含单个商品的数组覆盖写入Cookie,导致之前的购物车数据丢失。

解决方案

修改productList的初始化逻辑,优先从Cookie读取已有数据,再执行追加操作:

data() {
  return {
    // 从Cookie读取已有购物车数据,无数据则初始化为空数组
    productList: JSON.parse(this.$cookies.get('cart') || '[]')
  }
},
methods: {
  handleAddToCart(product) {
    this.productList.push(product)
    console.log('product list', this.productList)
    this.$cookies.set('cart', JSON.stringify(this.productList))
  }
}

可选优化(避免重复添加)

如果需要防止同一商品被重复加入购物车,可在添加前判断商品是否已存在(假设商品有唯一标识id):

handleAddToCart(product) {
  const isExist = this.productList.some(item => item.id === product.id)
  if (!isExist) {
    this.productList.push(product)
    this.$cookies.set('cart', JSON.stringify(this.productList))
    console.log('product list', this.productList)
  } else {
    console.log('该商品已在购物车中')
  }
}

内容的提问来源于stack exchange,提问作者Nina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 05:50:37