vue.js 中的公共属性显示警告

Posted

技术标签:

【中文标题】vue.js 中的公共属性显示警告【英文标题】:public properties in vue.js showing warning 【发布时间】:2018-07-24 00:32:52 【问题描述】:

组件代码

<template lang="html">
    <div class="chat-users">
        <ul class="list-unstyled">
            <li v-for="chatuser in chatusers" class="left clearfix">
                 chatuser.UserName 
            </li>
        </ul>
    </div>
</template>
<script>
    export default 
        props: ["chatusers"],
        created() 
            axios.post("some url").then(response => 
                this.chatusers = response.data.Data;
            );
        
    
</script>
<style>

</style>

一切正常,但我收到警告。

避免直接改变prop,因为值会被覆盖 每当父组件重新渲染时。相反,使用数据或 基于道具值的计算属性。道具被变异: “闲聊者”

【问题讨论】:

你需要chatusers作为道具吗?如果不使用 data 函数而不是 props 【参考方案1】:

根据 Vue.js 的数据流,从 parent 收到的 props 不应该被子组件修改。请参阅 the official documentation 和此 Stack Overflow answer。

正如您的警告所建议的:“使用基于道具值的数据或计算属性”,在您的情况下是从 axios 调用收到的响应。

【讨论】:

【参考方案2】:

有一个解释为什么 prop 不应该在 vue documentation 中发生变异。如果你需要改变状态,也许你需要一个数据来代替。

喜欢:

    export default 
        data ()  return  chatusers: null  ,
        created() 
            axios.post("some url").then(response => 
                this.chatusers = response.data.Data;
            );
        
    

【讨论】:

【参考方案3】:

这不是改变 props 的最佳方式,因为父级控制着这些数据,任何更改都会覆盖子级数据,from the docs:

另外,每次父组件更新时,所有的props在 子组件将使用最新值刷新。这 意味着您不应该尝试改变孩子体内的道具 零件。如果你这样做了,Vue 会在控制台中警告你。

【讨论】:

以上是关于vue.js 中的公共属性显示警告的主要内容,如果未能解决你的问题,请参考以下文章

错误:vue.js:634 [Vue 警告]:属性或方法“项目”未在实例上定义,但在渲染期间被引用

当 API 返回空数据时显示警告(Vue.js / Axios)

[Vue 警告]:属性或方法未在实例上定义,但在渲染期间引用

Vue.js。子组件中的变异道具不会触发警告。想知道为啥

[Vue 警告]:属性或方法“游戏”未在实例上定义,但在渲染期间引用

对类的公共方法禁用“未使用”警告