我一直在處理使用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