vue中computed和watch的区别,以及适用场景

computed:经过属性计算而得来的属性数组

  一、computed内部的函数在调用时不加()。缓存

  二、computed是依赖vm中data的属性变化而变化的,也就是说,当data中的属性发生改变的时候,当前函数才会执行,data中的属性没有改变的时候,当前函数不会执行。函数

  三、computed中的函数必须用return返回this

  四、在computed中不要对data中的属性进行赋值操做。若是对data中的属性进行赋值操做了,就是data中的属性发生改变,从而触发computed中的函数,造成死循环了。spa

  五、当computed中的函数所依赖的属性没有发生改变,那么调用当前函数的时候会从缓存中读取效率

  

  使用场景:当一个值受多个属性影响的时候------------购物车商品结算搜索

 

watch:属性监听循环

  一、watch中的函数名称必需要和data中的属性名一致,由于watch是依赖data中的属性,当data中的属性发生改变的时候,watch中的函数就会执行。引用

  二、watch中的函数有两个参数,前者是newVal,后者是oldVal。方法

  三、watch中的函数是不须要调用的。

  四、watch只会监听数据的值是否发生改变,而不会去监听数据的地址是否发生改变。也就是说,watch想要监听引用类型数据的变化,须要进行深度监听。"obj.name"(){}------若是obj的属性太多,这种方法的效率很低,obj:{handler(newVal){},deep:true}------用handler+deep的方式进行深度监听

  五、特殊状况下,watch没法监听到数组的变化,特殊状况就是说更改数组中的数据时,数组已经更改,可是视图没有更新。更改数组必需要用splice()或者$set。this.arr.splice(0,1,100)-----修改arr中第0项开始的1个数据为100,this.$set(this.arr,0,100)-----修改arr第0项值为100。

  六、immediate:true    页面首次加载的时候作一次监听。

 

  使用场景:当一条数据的更改影响到多条数据的时候---------搜索框

  

 

区别:

  一、功能上:computed是计算属性,watch是监听一个值的变化,而后执行对应的回调。

  二、是否调用缓存:computed中的函数所依赖的属性没有发生变化,那么调用当前的函数的时候会从缓存中读取,而watch在每次监听的值发生变化的时候都会执行回调。

  三、是否调用return:computed中的函数必需要用return返回,watch中的函数不是必需要用return。

  四、使用场景:computed----当一个属性受多个属性影响的时候,使用computed-------购物车商品结算。watch----当一条数据影响多条数据的时候,使用watch-------搜索框。

相关文章
相关标签/搜索