而是根据prop的值使用数据或计算属性。 Vue JS [英] Instead, use a data or computed property based on the prop's value. Vue JS

查看:641
本文介绍了而是根据prop的值使用数据或计算属性。 Vue JS的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

好吧,我正在尝试在Vue中更改变量的值,但是当我点击按钮时,他们会在控制台中抛出一条消息:

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 directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop being mutated: "menuOpen"

我不知道如何解决这个问题...

I have no idea how to solve this problem...

我的file.vue:

My file.vue:

<template>
  <button v-on:click="changeValue()">ALTERAR</button>
</template>

<script>

export default {
  name: 'layout',
  props: [ 'menuOpen' ],
  methods: {
    changeValue: function () {
      this.menuOpen = !this.menuOpen
    }
  },
}

</script>

任何人都可以帮助我吗?谢谢

Any one can help me? Thanks

推荐答案

警告很清楚。在 changeValue 方法中,您要更改属性的值, menuOpen 。这将在内部更改组件的值,但如果组件因任何原因必须重新渲染,那么无论内部值是什么,组件都将被覆盖当前状态外部组件。

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

如果您需要将值的更改传达回父级,那么您应该 $ emit 更改。

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

这篇关于而是根据prop的值使用数据或计算属性。 Vue JS的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆