Vue中methods(方法)、computed(计算属性)、watch(侦听器)的区别
2018-03-12 13:35
621 查看
1 . 相信有很多人都认为
假设现象一下购物车结算场景,用户选中商品的总金额是根据商品数量、选中商品种类数 和商品单价来变化的。
我们直接这样就可以算出选中金额的总数:
看到这里, 也许很多同学会有疑问, 使用
其实有本质的区别,
看到这里有同学又会想 我们为什么需要缓存?
假设我们有一个性能开销比较大的的计算属性
如果你不希望有缓存,请用方法来替代。
2 . 说了这么多,下面先对
首先它们都是以
但
(1).
(2).
虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。这就是为什么 Vue 通过 watch 选项提供了一个更通用的方法,来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。
例如Vue官网上这个例子: 侦听器
computed能实现的功能
methods一样能实现, 对吧?其实确实是这样,
computed能现实的methods确实能是现实,但是显示的过程可以有很大的差别的, 我就大家在这举一个列子来说明:
假设现象一下购物车结算场景,用户选中商品的总金额是根据商品数量、选中商品种类数 和商品单价来变化的。
我们直接这样就可以算出选中金额的总数:
computed:{ totalPrice(){ let totalPrice = 0 this.listOfArticles.forEach(food => { totalPrice += food.price + food.count }) return totalPrice // 我们只需要在模板中使用 {{ totalPrice }} 就可以表示选中的商品价格 } }
看到这里, 也许很多同学会有疑问, 使用
methdos定义一个
totalPrice方法和这个差不多啊?
其实有本质的区别,
computed是
基于它的依赖进行缓存的。computed只有在它的相关依赖发生变化才会重新计算求值。在本例子中也就是意味着只要价格和数量发生变化,
totalPrice方法才会执行, 而只要价格和数量没有发生变化,多次访问会立即返回之前的计算结果,而不必再次执行计算。
看到这里有同学又会想 我们为什么需要缓存?
假设我们有一个性能开销比较大的的计算属性
A,它需要遍历一个巨大的数组并做大量的计算。然后我们可能有其他的计算属性依赖于
A。如果没有缓存,我们将不可避免的多次执行
A的
getter!
如果你不希望有缓存,请用方法来替代。
2 . 说了这么多,下面先对
watch和
computed:
首先它们都是以
Vue的依赖追踪机制为基础的,它们的共同点是:都是希望在依赖数据发生改变的时候,被依赖的数据根据预先定义好的函数,发生“自动”的变化。
但
watch和
computed也有明显不同的地方:
watch和
computed各自处理的数据关系场景不同
(1).
watch擅长处理的场景:一个数据影响多个数据
(2).
computed擅长处理的场景:一个数据受多个数据影响
虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。这就是为什么 Vue 通过 watch 选项提供了一个更通用的方法,来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。
例如Vue官网上这个例子: 侦听器
相关文章推荐
- Vue中computed(计算属性)、methods、watch的区别
- vue生命周期、computed属性和 method方法、watch 属性区别
- vue从入门到进阶:计算属性computed与侦听器watch(三)
- 详解vue 计算属性与方法跟侦听器区别(面试考点)
- vue 计算属性computed和观察watch 和方法methods
- vue中watch和computed属性作用及区别
- vue的计算属性(computed)、methods、watched三者区别
- vue2.0中的watch和计算属性computed
- vue计算属性computed和methods的区别
- computed属性和watch属性的区别之二【computed的基本用法】
- 计算方法/侦听器/属性
- Vue的watch和computed方法的使用及区别介绍
- 关于computed(计算属性) methods watched (VUE)区别
- computed属性和watch属性的区别之三【购物车之watch】
- Vue.js中计算属性和方法的区别
- Vue1.0学习总结(3)———vue1.0的生命周期、vue计算属性computed的使用、vue实例(vm)上方法总结、vue结合动画使用
- Vue.js计算属性computed与watch(5)
- computed属性和watch属性的区别之四【购物车之computed】
- vue的 计算属性(computed)、methods、watched三者区别
- Vue计算属性(computed)、methods、watched三者区别