我一直在处理使用Vue,Vuex和Vue-Router的问题。我正在构建一个闪存卡应用程序,在创建主应用程序时获取所有卡,然后使用Vuex getter通过其作为路由参数传递的id获取每张卡。渲染函数错误:“TypeError:无法读取未定义的属性”,使用Vuex和Vue路由器
相关位:
App.vue
export default {
components: {
'app-header': header,
},
data() {
return {
}
},
created() {
this.$store.dispatch('getAllCards');
}
}
的dispatch('getAllCards')
只是拉从数据库中所有的牌,并承诺Vuex store.js
。
现在我成立了一个getter
:
getters: {
cardById: (state) => (id) => {
return state.allCards.find((card) => card._id === id);
}
}
这里是Card.vue
:
<template>
<div>
<br>
<div v-if="flipped" class="container">
<div class="box">
<pre v-if="card.code"><code class="preserve-ws">{{card.back}}</code></pre>
<p class="preserve-ws center-vertical" v-else>{{card.back}}</p>
</div>
</div>
<div v-else class="container">
<div class="box">
<h1 class="title has-text-centered center-vertical is-2">{{card.front}}</h1>
</div>
</div>
</template>
<script>
export default {
data() {
return {
card: {},
flipped: false,
general_card: false,
code_card: true,
random_card: false
}
},
computed: {
},
methods: {
},
created() {
this.card = this.$store.getters.cardById(this.$route.params.id);
}
}
</script>
我得到的标题中引用的类型错误。我的理解是created()
挂钩发生在data()
设置完成后,所以我可以使用getter分配{card}
。很不幸,这显示什么...
如果我给你card()
作为计算性能:
computed: {
card() {
return this.$store.getters.cardById(this.$route.params.id);
}
}
卡显示,但我仍然得到这个错误控制台。任何想法为什么?我看着this并试图解决,但无济于事。
对不起,我本来应该更具体的...我得到确切的错误是: '[Vue公司提醒]:错误的渲染功能:“类型错误:无法读取属性‘前’的未定义”' 您的解决方案并没有真正做任何事情。 – Aos
在我最近的评论中不意味着粗鲁。无论如何,错误追溯显示它出现在'Card.vue'组件中。 – Aos
它有一个简单的解决方案,你可以使用'card && card.front'来代替,然后不会抛出错误,但是我不能发现的真正原因 – masongzhi