vue项目computed计算属性无法监听到数组对象内部变化解决方案

问题描述

比如计算属性检测列表数据tableData,且vue store内部有存储改字段,但是修改tableData后,store内部有更新成最近数据,但是页面内computed未检测到数组变化,单独拿到watch监听也无效。

解决思路

看了很多篇文章,有些用this.$set(this.arr, 0 ,false)方式解决,但是我是整个数组变化,再循环一遍数组也不划算,于是就想到增加一个变量,初始值为0,只要重新请求列表数据(无论是增加修改删除都会更新列表数据接口),该变量都会加1,然后就可以通过watch监听该变量变化然后重新获取数组。具体代码如下:

//store里面
const state = {
    invoiceIndex: 0,//避免对computed无法监听报销列表数组内部状态变化,增加变量
}
const actions = {
  async getDailyDispatchList({
		   commit,state
	   }, data) {
	let res = await reimburseApi.getDailyDispatchList(data);
	if(res.code === 200){
	    //确定重新请求列表后,给变量加1,然后可以去页面内部watch监听
		commit('setState', {
				key: 'invoiceIndex',
				val: state.invoiceIndex+=1
		})
        //……其他操作代码
	}
  }
}

//vue页面内部
watch:{
      invoiceIndex: {
              handler(){
                  //此处需要直接从store里读取,在computed中读取还是没有更新
                  let list = store.state["reimburse"].dailyDispatchTableData;
                  if(!list || list.length<=0){
                      this.tableDataList = [];
                      return;
                  }
                  this.tableDataList = list;
              },
              immediate: true
          }
},
computed: {
      ...mapState(moduleId, {
          invoiceIndex: state => state.invoiceIndex,
          dailyDispatchTableData: state => state.dailyDispatchTableData,//这里没更新
      }),
},

如有疑问,欢迎沟通,欢迎大佬指导更好的书写方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

【拾光静好 微微一笑】

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值