Vue中computed 和 watch的区别

130 阅读2分钟

最近做Vue项目的时候经常会遇到这两个API,在使用的时候,会有些疑问,后面去查了资料,学习了一下,现在做个笔记以防忘记。

首先

两个API最本质的差别就在翻译上可以体现出来,一个是监听的意思,一个是计算属性,这是两者最字面的区别。

然后

分别用代码的例子来描述两个内容的话,是这样的:

watch(监听)

  • 不支持缓存,数据变化时会直接触发相应的操作。

  • watch支持异步。

  • 监听的函数接受两个参数,第一个参数是最新的值、第二个参数是输入之前的值。

  • 当一个属性发生变化时,需要执行对应的操作。

watch的两个选项

immediate:组件加载立即触发回调函数执行。

watch:{
  Name:{
    handler(newName,oldName){
      this.fullNmae = newName + '' + this.lastName;
    },
    //代表在watch里声明了Name这个方法之后立即执行handler方法
    immediate:true
  }
}

deep:deep的意思就是深入观察,任何修改obj里面任何一个属性都会触发这个监听器里的handler。

watch: {
  obj: {
    handler(newName, oldName) {
      console.log('obj.a changed');
    },
    immediate: true,
    deep: true
  }
}

computed(计算属性)

  • 支持缓存,只有依赖数据发生改变,才会重新进行计算。

  • 不支持异步,当computed内有异步操作时无效,无法监听数据的变化。

  • 如果一个属性是由其他属性计算而来的,这个属性依赖其他属性,是一个多对一或者一对一的话,一般用computed。

  • 如果computed属性值是函数,那么默认会走get方法、函数的返回值就是属性的属性值。在computed中的属性都有一个get和一个set方法,当数据变化是,调用set方法。