从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先本地缓存起来,然后再在外层作用中通过获取本地缓中存储好的数据,这样就能拿到数据了。