Vue中computed,methods,watch的区别?
computed
computed看上去是方法,但是实际上是计算属性,用于监听需要依赖其它属性而进行计算得来的值。计算结果会被缓存,computed的值在getter执行后是会缓存的,只有在它依赖的属性值改变之后,下一次获取computed的值时才会重新调用对应的getter来计算。而只要依赖的数据不更改他就不会去重新计算更新,而method里面的方法则是每次刷新都会去执行。
⚠️注意
在Vue的 template模板内({{}})是可以写一些简单的js表达式的,如上直接计算 {{this.firstName + ' ' + this.lastName}},因为在模版中放入太多声明式的逻辑会让模板本身过重,尤其当在页面中使用大量复杂的逻辑表达式处理数据时,会对页面的可维护性造成很大的影响,而 computed 的设计初衷也正是用于解决此类问题。
✅应用场景
- 适用于重新计算比较费时不用重复数据计算的环境。所有 getter 和 setter 的 this 上下文自动地绑定为 Vue 实例。如果一个数据依赖于其他数据,那么把这个数据设计为computed
- 表单校验,这个应用场景应该是比较常见的,利用正则表达式对每个表单项的实时监控,判断表单是否可以提交
- 用于处理复杂的逻辑运算;一个数据受一个或多个数据影响;用来处理watch和methods无法处理的,或处理起来不方便的情况。例如处理模板中的复杂表达式、购物车里面的商品数量和总金额之间的变化关系等。
模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。 --来自vue.js官方文档
methods
methods是方法,通常的使用场景是 Vue 组件,可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。方法中的 this 自动绑定为 Vue 实例。
methods 里面是用来定义函数的,很显然,它需要手动调用才能执行。而不像 watch 和 computed 那样,“自动执行”预先定义的函数。
例:
new Vue({
el: '#app',
template: '<div id="app"><p>{{ say() }}</p></div>',
methods: {
say: function () {
return '你好,jenkin!'
}
}
})
watch
观察和响应 Vue 实例上的数据变动
和methods相比
- 主要用来监听某些特定数据的变化,从而进行某些具体的业务逻辑操作,可以看作是 computed 和 methods 的结合体;
- 可以监听的数据来源:data,props,computed内的数据;
- watch支持异步;
- 不支持缓存,监听的数据改变,直接会触发相应的操作;
- 监听函数有两个参数,第一个参数是最新的值,第二个参数是输入之前的值,顺序一定是新值,旧值。
⚠️注意
监听的属性需要在data中定义,watch回调函数不可以使用箭头函数,因为箭头函数绑定了父级作用域的上下文,所以this 不是指向 Vue 实例。
✅应用场景
- 当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。
- 用来处理当一个属性发生变化时,需要执行某些具体的业务逻辑操作。
- 一个数据改变影响多个数据。例如用来监控路由、inpurt 输入框值的特殊处理等。
vue中 methods watch和computed的区别
三者的加载顺序
computed是在HTML DOM加载后马上执行的。
methods则必须要有一定的触发条件才能执行。
watch呢?它用于观察Vue实例上的数据变动。
默认加载的时候
先computed再watch,不执行methods;
触发某一事件后
先computed再methods再到watch
总结
1.computed是在 DOM加载后马上执行的,如赋值;
2.methods要有一定的触发条件才能执行,如点击事件;
3.watch用于观察Vue实例上的数据变动。对应一个对象,键是观察表达式,值是对应回调。
4.methods是通过事件驱动来执行函数的是被动的,
watch、computed是当监听的数据发生变化时主动执行这个函数。
5.如果一个数据依赖于其他数据,那么把这个数据设计为computed的 。
6.如果需要在某个数据变化时做一些事情,使用watch来观察这个数据变化。
7.watch模式没有computed模式简单,但watch比较适合做异步的操作。
8.相比于watch/computed,methods不处理数据逻辑关系,只提供可调用的函数
9.methods里面定义的函数,是需要主动调用的,而和watch和computed相关的函数,可以自动调用,完成我们想要完成的效果。
版权声明:
作者:jenkin
链接:https://blog.ijenkin.top/index.php/2021/09/17/vuezcomputedmethodswatchdqb/
来源:Jenkin
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论