问题就出现在使用这样的写法直接修改/更新state对象中的值,state中的值是修改了,但是vuex监测不到,所以很简单的方法就是整个对象去替换/赋值,这样vuex就能监测到state的变化,同时getters也会跟着变化

 

简单的处理方法是,将对象或数组转换成字符串,在转换回来,赋值就解决这个问题了

downNum(state,id){

    //将对象转换一下,从新开辟内存空间保持,然后在从新赋值,完美解决
    let cartGood=JSON.parse(JSON.stringify(stata.cartGoods));
    cartGood[idx].num--;
    state.cartGood=cartGood;

}


第一种方法:可以通过JSON序列化来实现

vuex的mutations

add(state,id){
  let idx=state.cartGoods.findIndex((item)=>item.id==id);
  let goodsArr=JSON.parse(JSON.stringify(state.cartGoods));
  goodsArr[idx].num++;
  state.cartGoods=goodsArr;

}

第二种办法:可以使用vue提供的$forceUpdata方法

vuex的actions

add(context,id){
context.commit('add',id)
}

 

vuex的mutations

add(state,id){
   let idx=state.cartGoods.findIndex((item)=>item.id==id);
   state.cartGoods[idx].num++;
}

页面组件代码

methods:{
   ...mapActions(['add']),
   add(id){
        this.add(id);
        //调用完成vuex中的actions操作方法对数据进行改变后
        //强制重新渲染页面,触发update生命周期钩子函数
        this.$forceUpdate();

   }


}

 

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐