<script>
export default {
name: "index",
data() {
return {
products: this.$store.state.app.products
}
},
mounted() {
if (this.products.length <= 0) this.$store.dispatch('getProducts');
}
}
</script>
<template>
<ul>
<li v-for="(product,index) of productData ">{{prduct.title}}</li>
</ul>
</template>
在vuex中的actions中异步获取数据赋值给 products
但是这样做第一次加载时不会有数据的 只有在路由切换后才有数据
有什么办法让vuex中赋值之后这边组件中的数据及时更新???
products不要放在data里定义,应该放在computed计算属性里定义:
错误原因:
你先给data中的products赋值为this.$store.state.app.products然后vuex异步获取数据给state.app.products。
此时vuex中的products得到数据后更新,但是data不会响应式的根据vuex中的products的改变来改变,所以data里的products没有数据。
切换路由后,你这个组件没有进行缓存,它在切换其他路由时已经被销毁,切换回来时重新渲染,取得vuex中的products。
此时vuex中products已经有了值,所以data里的products能得到数据。
下面是vuex文档中有提到得到state里值的方式最好是写在计算属性里面
vuex文档