VueJ,计算属性和观察者之间的区别?

在Vue.js文档中,有一个类似下面的示例:

var vm = new Vue({
  el: '#demo',
  data: {
    firstName: 'Foo',
    lastName: 'Bar',
    fullName: 'Foo Bar'
  },
  watch: {
    firstName: function (val) {
      this.fullName = val + ' ' + this.lastName
    },
    lastName: function (val) {
      this.fullName = this.firstName + ' ' + val
    }
  }
})

上面的代码是命令性的和重复的。将其与计算的属性版本进行比较:

var vm = new Vue({
  el: '#demo',
  data: {
    firstName: 'Foo',
    lastName: 'Bar'
  },
  computed: {
    fullName: function () {
      return this.firstName + ' ' + this.lastName
    }
  }
})

观察者比计算属性更合适的情况是什么?我应该如何决定选择哪个?文档不断说它是“通用的”,但并没有真正说明其目的。

猿神奇2020/03/11 15:03:57

当您要执行异步或昂贵的操作以响应更改的数据时,请使用watch。

计算的

在其他情况下使用计算得出。根据它们的依赖性缓存计算的属性。通常在只想重新评估其某些依赖项已更改时使用。

理查德Near2020/03/11 15:03:57

计算属性具有一个非常特定的目的:组成从其他数据派生的新数据。只要您有一些数据并且需要对其进行转换,过滤或以其他方式对其进行操作,然后在模板中使用它们,便会使用它们。

计算属性始终必须返回一个值,不应有任何副作用,并且它们必须是同步的。

因此,在很多情况下,计算属性都无法为您提供帮助,例如:您的组件接收到一个prop,并且每当prop更改时,您的组件都必须发出ajax请求。为此,您需要一个观察者。

监视程序没有计算属性那么有用,因此,您应始终考虑计算属性是否可以解决您的问题,如果不是这种情况,请仅依靠监视程序(或有时使用方法)。