Vue.js 有什么东西会触发控制台中的警告?为什么不推荐它?您将如何修复它?

Vue.js 有什么东西会触发控制台中的警告?为什么不推荐它?您将如何修复它?,vue.js,vuejs2,Vue.js,Vuejs2,这是关于Javascript和VueJs的良好实践和知识 我已经对类型Api进行了注释,以查看是否存在其他警告 <script> export default { name: "printer", props: { model: { type: String, required: true }, ip: {

这是关于Javascript和VueJs的良好实践和知识

我已经对类型Api进行了注释,以查看是否存在其他警告

<script>
    export default {
        name: "printer",
        props: {
            model: {
                type: String,
                required: true
            },
            ip: {
                type: String,
                required: true
            },
            jobs: {
                type: Object,
                validator: (value) => ["inProgress", "done", "error"].every((status) => typeof value[status] === "number")
    },
    progress: {
        type: Number,
            required: true
    },
    api: {
        type: Api,
            required: true
    }
    },
    data: () => ({
        timer: null
    }),
        methods: {
        async refreshProgress() {
            this.jobs = await this.api.getJobsNumbers({ model: this.model });
        }
    },
    created() {
        this.timer = setInterval(() => this.refreshProgress(), 30000);
    },
    destroyed() {
        clearInterval(this.timer);
    }
    };
</script>

导出默认值{
名称:“打印机”,
道具:{
型号:{
类型:字符串,
必填项:true
},
知识产权:{
类型:字符串,
必填项:true
},
工作:{
类型:对象,
验证器:(值)=>[“正在进行”、“完成”、“错误”]。每个((状态)=>值的类型[状态]==“数字”)
},
进展:{
类型:数字,
必填项:true
},
api:{
类型:Api,
必填项:true
}
},
数据:()=>({
计时器:空
}),
方法:{
异步刷新进度(){
this.jobs=等待this.api.getJobsNumbers({model:this.model});
}
},
创建(){
this.timer=setInterval(()=>this.refreshProgress(),30000);
},
销毁(){
clearInterval(这个计时器);
}
};

所以我在寻找建议,因为我是VueJS的初学者,需要描述和更改用途

问题缺少确切的警告文本,所以我猜您提到的警告可能是这样的:

[Vue warn]:避免直接改变道具,因为每当父组件重新渲染时,该值将被覆盖。相反,使用基于道具值的数据或计算属性。道具变异:“工作”

换句话说,您正在子组件中改变父组件的状态,这不是一个好主意,这就是Vue警告您的原因

有几种方法可以修复它:

  • 制作道具的副本并将其存储在组件数据中。仅更新内部状态。更改对父级不可见
  • 不要改变
    jobs
    prop,而是触发一个传递新状态(从API调用返回)的自定义事件作为参数。父级需要处理事件并使用新值更新其自身状态(更新将通过prop返回子组件)
  • 如果您完全确定您的
    打印机
    组件将是唯一将变异
    作业
    对象的位置,则可以变异对象的属性,而不是在没有任何警告的情况下替换整个对象。这是可能的,但不推荐

  • 有关更多信息,请参见或查看控制台中出现的错误?vue.runtime.esm.js?2b0e:619[vue warn]:缺少必需的道具:“model”:在-->src/App.vue warn@vue.runtime.esm.js?2b0e:619 vue.runtime.esm.js?2b0e:619[vue warn]:缺少必需的道具:“ip”在-->中找到src/App.vue warn@vue.runtime.esm.js?2b0e:619 vue.runtime.esm.js?2b0e:619[vue warn]:缺少必需的道具:在-->中找到的“进度”在src/App.vue中使用组件的部分代码(模板)更新您的问题。。。。