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)
}