我正在尝试使用Vue 2.5.2和Vuex 3.0.1设置一个应用程序,我唯一无法摆脱的是这个警告:
[Vue警告]:渲染错误:“TypeError:_vm.product未定义”
product只是产品的元素,是一个存储在Vuex状态的数组,在创建Vue实例后执行下一行之后填充该数组:
vm.$store.dispatch('getProducts')
在我的组件中,我使用下一个计算属性获取产品:
product: function () {
return this.$store.getters.getProductById(this.id)
},
this.id由Vue Router发送(并且已正确定义) . getter看起来像这样:
getProductById: (state) => (id) => {
return state.products.find(product => product.id === id)
},
出现此警告后,实际产品信息将正确显示,因此我猜Vue尝试在Vuex实际从服务器检索信息之前加载并呈现信息 .
有关如何让Vue等待Vuex以适当有效的方式加载数据的任何想法?
1 回答
我发现了这个问题 . 作为specified in the Vue 2 API,Vue只能保证一个对象在被正确初始化后才会被动 .
在我的Vuex状态下,我确实初始化了我试图通过
this.$store.getters.getProductById(this.id)
访问的产品对象 . 空结构看起来像这样:product: {}
但我错过了一个应该放在产品嵌套对象中的数组 . 所以最后我通过初始化结构解决了这个问题:`
“就是这样 .