问题:从vuexstore中获取到的对象,直接打印这个对象就有内容,但是如果打印对象里的属性就为undefined了

从vuexstore中获取到的对象,直接打印这个对象就有内容,但是如果打印对象里的属性就为undefined了

问题:从vuexstore中获取到的对象,直接打印这个对象就有内容,但是如果打印对象里的属性就为undefined了

原因:

  • action是异步操作,在commit方法里面再去打印肯定就有值了,
    那为什么对象能打印的到:因为对象变量是地址,展开的时候对象已经扩充了。所有就可以看到对象里面的值
    对象变量在内存中存的是这个对象的地址,而普通数据变量是变量实际的值。
  • 所以其实在打印的获取到的对象那一刻其实也是空对象,但是在展开的时候,commit操作已经完成,所以对象就得到了里面的值,因此我们就在打印这个对象的时候可以看到对象里的属性。
  • 但是普通类型打印的那一刻是什么就是什么了,所以当我们打印从store中获取的对象里面的某一个属性的时,比如allQuestionList .value时,他就只是一个普通的打印了,这是commit操作还没有完成,所以没有值。

解决方法:加一个定时器

const allList = computed(
      () => store.state.ListModule.allListInfo
    )
console.log(allList.value)  //没有值

setTimeout(() => {
     console.log(allList.value)  //有值
    }, 1000

但是加了定时器之后,写在定时器里的内容(变量,函数等)在外层作用域又无法获取到进行使用,因此这里就通过在定时器里将需要的数据通过localStorage先本地缓存起来,然后再在外层作用中通过获取本地缓中存储好的数据,这样就能拿到数据了。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值