我正在学习vuejs,但我找不到合适的答案。当我点击编辑年龄按钮或更改我的名字按钮,我得到下面的错误。
[Vue warn]:避免直接改变道具,因为每当父组件重新渲染时,该值将被覆盖。相反,使用基于道具值的数据或计算属性。道具变异:“我的名字”
[Vue warn]:避免直接改变道具,因为每当父组件重新渲染时,该值将被覆盖。相反,使用基于道具值的数据或计算属性。道具变异:“用户年龄”
代码在这里。
https://codesandbox.io/s/k2197nr4o3
请让我知道这个代码有什么问题。
改为使用计算值。例如,在您的UserEdit.vue:
在模板中:
<p>User Age: {{ computedUserAge }}</p>
在脚本中:
methods: {
editAge() {
this.computedUserAge = 30;
}
},
computed: {
computedUserAge: {
get() {
return this.userAge;
},
set(v) {
this.$emit("ageWasEdited", v);
}
}
}
很明显,您正试图直接更改道具属性。
例如:
props: { name: 'something' }
methods: {
change_name(new_name) {
this.name = new_name
}
}
不建议这样做,这可能导致反应性不足。
作为解决方案,您可以使用父子通信。因此,每当您想要更改道具时,只需向父组件发出事件。所以上面的例子应该是:
props: { name: 'something' }
methods: {
change_name(new_name) {
this.$emit('name-updated', new_name)
}
}
在父组件上,监听该事件以更改您正在传递的道具:
或者我最喜欢的方法是使用.sync修饰符。因此父组件应该是:
以及子组件上的方法:
change_name(new_name) {
this.$emit('update:name', new_name)
}
如果组件没有父子关系,请查看Vue.js事件总线或Vuex
我的观点是这样的: 我的星形组件如下所示: 我的css是这样的: 当我点击星号时,控制台上出现如下错误: [Vue warn]:避免直接改变道具,因为每当父组件重新渲染时,该值将被覆盖。相反,使用基于道具值的数据或计算属性。正在变异的道具:“value”(位于C:\xampp\htdocs\myshop\resources\assets\js\components\Star.vue) 我怎样才能解
升级到Vue 2.0我有很常见的问题 我得到警告: 避免直接改变道具,因为每当父组件重新渲染时,该值将被覆盖。相反,使用基于道具值的数据或计算属性。正在变异的道具:“用户名”(在组件中找到) 我读了很多次文档,但仍然不明白如何修复它。 和在主Vue应用中声明。 这是我的代码: 我尝试了,但它似乎不起作用,我不明白为什么。它应该将该值绑定到父级(主Vue应用程序)
我有一个问题与我的道具editToWork: app.js:42491[Vue warn]:避免直接修改道具,因为每当父组件重新渲染时,该值将被覆盖。相反,使用基于道具值的数据或计算属性。道具正在变异:“任务编辑” 组件TaskComponent.vue 组件EditTaskComponent:
如何解决此错误消息: [Vue warn]:避免直接改变道具,因为每当父组件重新渲染时,该值将被覆盖。相反,使用基于道具值的数据或计算属性。道具变异:“抽屉” 父组件: 子组件:
我有一个对话框组件: 如果我想在父组件中使用它: 这是有效的,我的意思是应用程序不会崩溃。但是我被警告说,我应该声明一个数据/计算属性;这很奇怪,因为如果我想变异5-7个道具,对于它们中的每一个,我也必须在子组件上声明一个数据属性?如果父级有,,数据道具,那么如果我想在子级上变异它们,子级也应该声明它们?我们不是在重复自己吗?我如何防止这种重复?
我得到警告: app.js:87486[Vue警告]:避免直接更改prop,因为每当父组件重新呈现时,该值将被覆盖。相反,使用基于道具值的数据或计算属性。被变异的道具:“喜欢计数” 我的刀锋 Vue代码