一 概念 (1) computed:具有缓存性,computed的值在getter执⾏后是会缓存的, 只要data 中的数据中的依赖值还没有发生改变,计算属性会立即返回 之前的计算结果,而不必再次执行函数;只有在它依赖的属性值改变之 后,下⼀次获取 computed的值时才会新调⽤对应的getter来计算。 (2) methods:只要发生重新渲染,method 调用总会重新执行函数。 (3) watch:是监听器,侦听一个特定的值,当该值变化时执行特定的函 数,无缓存性,页面重新渲染时值不变化也会执行 总之: 数据量大,需要缓存的时候用 computed ;每次确实需要重新加载,不需要缓存时用 methods ;需要监听某个值变化时用watch 。 二 区别 watch、computed、methods的区别: watch: a.一个对象,键是需要观察的表达式,值是对应回调函数。 b.主要用来监听某些特定数据的变化,从而进行某些具体的业务逻辑操作。 c.可以看作是computed和methods的结合体。
computed: a.属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算。
b.主要当属性来使用。
methods: a.方法表示一个具体的操作,主要是书写业务逻辑。
(2)watch 和 computed 区别 ①功能上: a. computed是计算属性, b. watch是监听一个值的变化,然后执行对应的回调。 ②是否调用缓存: a. computed计算属性, 有缓存功能,值改变时,才会重新计算; b. watch没有缓存,每一次数据变化时都会执行, ③是否调用return: a.computed中的函数必须要用return返回,把计算的结果return出去 ; b. watch中的函数不是必须要用return ④使用场景 watch擅长处理的场景: a.watch:属性监听一个数据影响多个数据 --- 应用场景--------搜索框、表单输入、异步更新、动画
computed擅长处理的场景:
a.一个数据受多个数据影响 -- --- ----------- 应用场景--------购物车商品结算 (受到单价 数量 还有是否被选中的影响)
watch:属性监听 是监听器,侦听一个特定的值,当该值变化时执行特定的函 数,无缓存性,页面重新渲染时值不变化也会执行 ①watch中的函数名称必须要和data中的属性名一致,因为watch是依赖data中的属性,当data中的属性发生改变的时候,watch中的函数就会执行。 ②watch中的函数有两个参数,前者是newVal,后者是oldVal。 ③watch中的函数是不需要调用的。 ④a. watch只会监听数据的值是否发生改变,而不会去监听数据的地址是否发生改变。 b. 也就是说,watch想要监听引用类型数据的变化,需要进行深度监听。"obj.name"(){}------如果obj的属性太多,这种方法的效率很低, c. obj:{handler(newVal){},deep:true}------用handler+deep的方式进行深度监听。 d. 特殊情况下,watch无法监听到数组的变化,特殊情况就是说更改数组中的数据时,数组已经更改,但是视图没有更新。更改数组必须要用splice()或者set(this.arr,0,100)-----修改arr第0项值为100。 e .immediate:true 页面首次加载的时候做一次监听。 f. 一个数据影响多个数据 --- 应用场景:搜索框、表单输入、异步更新、动画
computed:计算属性 具有缓存性,computed的值在getter执⾏后是会缓存的, 只要data 中的数据中的依赖值还没有发生改变,计算属性会立即返回 之前的计算结果,而不必再次执行函数;只有在它依赖的属性值改变之 后,下⼀次获取 computed的值时才会新调⽤对应的getter来计算。 ①据依赖关系进行缓存的计算,并且只在需要的时候进行更新。 ②一个计算属性里面可以完成各种复杂的逻辑,最终返回一个结果;计算属性可以依赖多个vue实例的数据,只要其中一个任何一个数据发生变化,计算属性就会重新执行,视图也会更新。 除此之外,计算属性还可以依赖其他计算属性和其他实例的数据 ③一个数据受多个数据影响 ---- 购物车结算 受到单价 数量 还有是否被选中的影响
使用 computed 的好处: ①提高性能 当我们改变 number 时,整个应用会重新渲染,vue 会被数据重新渲染到 dom 中。 这时,如果我们使用 methods 方法,随着渲染,方法需要被重新调用。 当我们拿到的值需要进行一定处理使用时,就可以使用 computed。
methods:方法 只要发生重新渲染,method 调用总会重新执行函数。