Well, I\'m trying to change a value of \"variable\" in Vue, but when I click on the button they throw a message in console:
[Vue warn]: Avoid mutating a prop
The warning is pretty clear. In your changeValue
method you are changing the value of the property, menuOpen
. This will change the value internally to the component, but if the parent component has to re-render for any reason, then whatever the value is inside the component will be overwritten with the current state outside the component.
Typically you handle this by making a copy of the value for internal use.
export default {
name: 'layout',
props: [ 'menuOpen' ],
data(){
return {
isOpen: this.menuOpen
}
},
methods: {
changeValue: function () {
this.isOpen= !this.isOpen
}
},
}
If you need to communicate the change of the value back to the parent, then you should $emit
the change.
changeValue: function () {
this.isOpen= !this.isOpen
this.$emit('menu-open', this.isOpen)
}