渲染函数中的错误:“TypeError:无法读取未定义的属性”,使用 Vuex 和 Vue Router

我一直在使用 Vue、Vuex 和 Vue-Router 处理一个问题。我正在构建一个闪存卡应用程序,在主应用程序创建时获取所有卡片,然后使用 Vuex getter 通过其作为路由参数传递的 id 获取每张卡片。

相关位:

应用程序视图

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>

我在标题中引用了 TypeError。我的理解是created()钩子在data()设置之后发生,所以我可以{card}使用 getter进行分配不幸的是,这没有显示任何内容......

如果我分配card()为计算属性:

computed: {  
  card() {
    return this.$store.getters.cardById(this.$route.params.id);
  }
}

该卡显示,但我仍然在控制台中收到该错误。知道为什么吗?我看着这个并尝试了该解决方案,但无济于事。

托比诺

这个问题没有得到正确答案的所有前提。(我们不知道突变,状态,也不知道动作,我们也没有关于 app-header 组件的线索)所以我们不得不承认一些假设:

  1. state.allCardsArray挂载组件时为空
  2. actiongetAllCards是一个异步函数,用于检索或设置state.allCards突变

cardById的 getter,返回一个函数,所以 vuex 不能在函数上应用反应式。因此,如果状态发生变化,则不会正确触发 getter。要纠正此问题,请使用computed在此处提及的内容

但它并没有修复undefined error,从我的角度来看,这是因为 getterundefined在安装时返回

getters: {
  cardById: (state) => (id) => {
    var card = state.allCards.find((card) => card._id === id);
    if(card) {
      return card;
    }
    // on undefined return a default value
    return {
      front:'default value'
    };
  }
}

你可以在这个jsfiddle上看到实现,控制台上没有错误。

或者,您可以为卡片组件设置未定义值的加载状态。

如果我的假设是错误的,请提供一个 jsfiddle 来帮助你。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Vuex和Vue-Router进行简单的状态管理

来自分类Dev

Vue.js:TypeError:无法读取未定义的属性“$router”?

来自分类Dev

使用vue-router的vuex getter不更新

来自分类Dev

Redux-Persist和Connected-React-Router:TypeError:无法读取未定义的属性“位置”

来自分类Dev

$router redefine 和 Vue.use(Vuex) 应该只调用一次

来自分类Dev

TypeError:无法读取未定义的属性“ get”-Vue资源和Nuxt

来自分类Dev

vue.js:属性或方法“”未定义,渲染错误:“TypeError:无法读取未定义的属性''”

来自分类Dev

渲染错误:“ TypeError:无法读取未定义的属性'名称'”(Vue)

来自分类Dev

VueJs [Vue警告]:渲染错误:“ TypeError:无法读取未定义的属性'title'”

来自分类Dev

[Vue警告]:渲染错误:“ TypeError:无法读取未定义的属性'correct_answer'”

来自分类Dev

[Vue 警告]:渲染错误:“TypeError:无法读取未定义的属性‘BTC’”

来自分类Dev

使用vuex和vue-resource预取数据

来自分类Dev

Vuex getters-properties使用vue-router时失败-它们无法做出反应

来自分类Dev

Vue.js VUEX 属性未定义问题

来自分类Dev

Vuex返回“ TypeError:无法读取未定义的属性'getters'”

来自分类Dev

带有Vuex和自定义组件的Vue.js,@ click方法输出未定义

来自分类Dev

Vuex存储的Vue.set()和push()

来自分类Dev

Vue和Vuex-不排序

来自分类Dev

使用v-for和router的Vue中的NavBar

来自分类Dev

使用v-for和router的Vue中的NavBar

来自分类Dev

Laravel 5.4和Vue 2.0.1无法读取未定义的属性'get'

来自分类Dev

Vuejs和Vuex无法读取属性'$ store'

来自分类Dev

router.post返回错误“未定义不是函数”。使用mongo和express.js

来自分类Dev

在Vue 2和Vuex上使用传递的prop作为变量动态访问对象属性

来自分类Dev

如何在Vuetify组件中使用Vue v模型绑定以及计算的属性和Vuex?

来自分类Dev

Laravel 6和Vue.js使用vue-router和axios从子组件更新记录

来自分类Dev

vue 3与Vuex和路由器的服务器端渲染

来自分类Dev

无法在Vue 3中使用Vuex

来自分类Dev

Vue和Vuex:更改状态时不调用计算属性

Related 相关文章

  1. 1

    使用Vuex和Vue-Router进行简单的状态管理

  2. 2

    Vue.js:TypeError:无法读取未定义的属性“$router”?

  3. 3

    使用vue-router的vuex getter不更新

  4. 4

    Redux-Persist和Connected-React-Router:TypeError:无法读取未定义的属性“位置”

  5. 5

    $router redefine 和 Vue.use(Vuex) 应该只调用一次

  6. 6

    TypeError:无法读取未定义的属性“ get”-Vue资源和Nuxt

  7. 7

    vue.js:属性或方法“”未定义,渲染错误:“TypeError:无法读取未定义的属性''”

  8. 8

    渲染错误:“ TypeError:无法读取未定义的属性'名称'”(Vue)

  9. 9

    VueJs [Vue警告]:渲染错误:“ TypeError:无法读取未定义的属性'title'”

  10. 10

    [Vue警告]:渲染错误:“ TypeError:无法读取未定义的属性'correct_answer'”

  11. 11

    [Vue 警告]:渲染错误:“TypeError:无法读取未定义的属性‘BTC’”

  12. 12

    使用vuex和vue-resource预取数据

  13. 13

    Vuex getters-properties使用vue-router时失败-它们无法做出反应

  14. 14

    Vue.js VUEX 属性未定义问题

  15. 15

    Vuex返回“ TypeError:无法读取未定义的属性'getters'”

  16. 16

    带有Vuex和自定义组件的Vue.js,@ click方法输出未定义

  17. 17

    Vuex存储的Vue.set()和push()

  18. 18

    Vue和Vuex-不排序

  19. 19

    使用v-for和router的Vue中的NavBar

  20. 20

    使用v-for和router的Vue中的NavBar

  21. 21

    Laravel 5.4和Vue 2.0.1无法读取未定义的属性'get'

  22. 22

    Vuejs和Vuex无法读取属性'$ store'

  23. 23

    router.post返回错误“未定义不是函数”。使用mongo和express.js

  24. 24

    在Vue 2和Vuex上使用传递的prop作为变量动态访问对象属性

  25. 25

    如何在Vuetify组件中使用Vue v模型绑定以及计算的属性和Vuex?

  26. 26

    Laravel 6和Vue.js使用vue-router和axios从子组件更新记录

  27. 27

    vue 3与Vuex和路由器的服务器端渲染

  28. 28

    无法在Vue 3中使用Vuex

  29. 29

    Vue和Vuex:更改状态时不调用计算属性

热门标签

归档