【问题标题】:props from father component is undefined in child although it work correctly父组件的道具在子组件中未定义,尽管它可以正常工作
【发布时间】:2017-12-07 13:16:30
【问题描述】:

所以我将数据从父组件传递给子组件,然后在子组件中将其显示在视图中。一切正常,但是当我去 consol 时,我发现那里发生了问题,尽管代码工作正常并且显示的数据符合我的预期。

父组件:

<article-header :article="articles"></article-header>

此行位于&lt;template&gt; 标记中。文章变量是 API 后端 http 请求中收集的值。

&lt;article-header&gt; 的子组件中,我像这样使用这些数据:

<template>
<p>{{ article[0].title }}</p>
</template>
<script>

    export default {
        props:['article']
    }

</script>

它运行良好,它完全按照我想要的方式从数据库中显示我的标题,但它也在浏览器控制台中给出错误:

[Vue 警告]:渲染错误:“TypeError: Cannot read property 'title' of undefined”

发现于 ---> 在 src\components\no_related\article\elements\articleHeader.vue 在 src\components\no_related\article\article.vue 在 src\App.vue

有人知道什么会导致这种行为吗?

【问题讨论】:

    标签: javascript vue.js vuejs2


    【解决方案1】:

    Vue 在您的后端 http 请求完成之前渲染您的组件,即您的文章仍未定义。这就是导致控制台中的条目的原因。

    一旦您的 http 请求完成,Vue 会使用现有数据更新组件。这就是您在浏览器中看到的内容。

    【讨论】:

    • 我能做些什么来修复它?我的意思是它正在工作,但我也不想在我的控制台中出现任何错误。我可以以某种方式延迟阅读子组件中的道具吗?或者也许我应该在孩子内部做 http 请求?第二个感觉很傻,因为我需要对两个孩子做完全相同的请求。
    • 请提供此行为的实际解决方案,因为现在您只解释了为什么会发生这种情况。那我就接受这个答案。
    • 你可以用一个占位符对象来初始化你的文章,一个只有一个空标题的虚拟对象。一旦您的 http 请求完成,您就可以用实际数据替换虚拟对象。
    • 如果我理解正确,我已经尝试过这样做,我在数据函数data() { return { article: [] } }, 中创建名为 article 的空数组,但随后错误为The data property "article" is already declared as a prop. Use prop default value instead.
    • 毕竟我只是使用 v-if 来验证文章是否已经存在。我认为这个解决方案也足够高效,不是吗?
    猜你喜欢
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    • 2018-04-15
    • 2019-02-24
    • 1970-01-01
    • 2020-10-02
    相关资源
    最近更新 更多