You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Vue中函数式data的更新方法及对象式data修改咨询

解决Vue组件data从对象改为函数形式的问题

嗨,我来帮你搞定这个问题~

首先得明确Vue风格指南要求组件的data必须是返回对象的函数的原因:当你复用组件的时候,如果data是一个纯对象,所有组件实例会共享同一份数据——这意味着一个实例修改数据会影响到其他所有实例,这显然不是我们想要的。而用函数返回对象的话,每个组件实例都会调用这个函数,得到属于自己的独立数据副本,彻底避免数据共享的问题。

第一步:把data从对象改成函数形式

原来你可能是这么写的:

// 不推荐的对象形式
Vue.component('some-comp', {
  data: {
    foo: 'bar'
  }
})

按照指南改成函数返回对象的形式,非常简单:

// 推荐的函数形式
Vue.component('some-comp', {
  data: function () {
    return {
      foo: 'bar'
    }
  }
})

如果用ES6语法,也可以写成更简洁的写法:

data() {
  return {
    foo: 'bar'
  }
}

第二步:修改数据的方式完全不变!

你之前写的修改数据的方法完全没问题——不管data是对象还是函数返回的对象,组件实例都会把数据对象里的属性代理到自身,所以你依然可以通过this.属性名来访问和修改数据:

Vue.component('some-comp', {
  data() {
    return {
      foo: 'bar'
    }
  },
  methods: {
    updateFoo() {
      this.foo = 'new value here'
    }
  }
})

举个完整的使用例子,点击按钮就能更新foo的值:

Vue.component('some-comp', {
  data() {
    return {
      foo: 'bar'
    }
  },
  methods: {
    updateFoo() {
      this.foo = 'new...'
    }
  },
  template: `
    <div>
      <p>当前Foo的值:{{ foo }}</p>
      <button @click="updateFoo">点击更新Foo</button>
    </div>
  `
})

额外小提示

如果是用单文件组件(.vue文件),写法也是完全一致的,data选项同样写成返回对象的函数,修改数据的逻辑不变。

内容的提问来源于stack exchange,提问作者nazreen

火山引擎 最新活动