Instead, use a data or computed property based on the prop's value. Vue JS

前端 未结 1 2041
感情败类
感情败类 2021-01-08 00:22

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         


        
相关标签:
1条回答
  • 2021-01-08 01:03

    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)
    }
    
    0 讨论(0)
提交回复
热议问题