美文网首页
Vue中computed和watch的区别

Vue中computed和watch的区别

作者: 饥人谷_折纸大师 | 来源:发表于2022-08-22 12:05 被阅读0次

computed 计算属性

计算属性基于 data 中声明过或者父组件传递的 props 中的数据通过计算得到的一个新值,这个新值只会根据已知值的变化而变化,简言之:这个属性依赖其他属性,由其他属性计算而来的。

实例:

<p>姓名:{{ fullName }}</p>
... ...
data: {
    firstName: 'David',
    lastName: 'Beckham'
},
computed: {
    fullName: function() { //方法的返回值作为属性值
            return this.firstName + ' ' + this.lastName
    }
}

以属性访问的形式调用,即在页面中使用 {{ 方法名 }} 来显示计算的结果。

此外computed有一个重要的特点,就是 computed 带有缓存功能。只有当 computed 属性被使用后,才会执行 computed 的代码,在重复的调用中,只要依赖数据不变,直接取缓存中的计算结果。只有依赖型数据发生改变,computed 才会重新计算。

watch 监听属性

通过 vm 对象的 $watch() 或 watch 配置来监听 Vue 实例上的属性变化,或某些特定数据的变化,然后执行某些具体的业务逻辑操作。当属性变化时,回调函数自动调用,在函数内部进行计算。其可以监听的数据来源:data,props,computed 内的数据。

实例:

watch: {
    // 监听 data 中的 firstName,如果发生了变化,就把变化的值给 data 中的 fullName, val 就是 firstName 的最新值
    firstName: function(val) { 
        this.fullName = val + ' ' + this.lastName
    },
    lastName: function(val) {
        this.fullName = this.firstName + ' ' + val
    }    
}
// 由上可以看出 watch 要监听两个数据,而且代码是同类型的重复的,所以相比用 computed 更简洁

注:监听函数有两个参数,第一个参数是最新的值,第二个参数是输入之前的值,顺序一定是新值,旧值,如果只写一个参数,那就是最新属性值。
此外,watch有两个选项需要注意,一个是immediate,另一个是deep。

data: {
    fullName: {
        firstName: 'Peter',
        lastName: 'Parker'
    }
},
watch: {
    fullName: {
        handler(newVal, oldVal) {
            console.log(newVal);
            console.log(oldVal);
        },
        deep: true//监听一个对象内部的变化 默认为否
        immediate: true//是否在第一次渲染的时候要执行这个函数 默认为否
    }
}

如何回答computed和watch的区别

computed是计算属性的意思,watch是监听的意思。

computed:

1.computed是用来计算出一个值的,这个值在调用的时候不需要加括号,和取data对象里的数据属性一样,以属性访问的形式调用;

2.computed 属性值默认会缓存计算结果,在重复的调用中,只要依赖数据不变,直接取缓存中的计算结果,只有依赖型数据发生改变,computed 才会重新计算。

3.在computed中的,属性都有一个 get 和一个 set 方法,当数据变化时,调用 set 方法。

watch:

1.watch是用来监听的,它有2个选项immediate和deep。

2.immediate表示是否在第一次渲染的时候要执行这个函数。
deep如果我们监听一个对象那么是否要看里面的属性的变化。
定义:如果某个属性变化了我就去执行这个函数。

3.watch支持异步。

4.不支持缓存,监听的数据改变,直接会触发相应的操作;

相关文章

网友评论

      本文标题:Vue中computed和watch的区别

      本文链接:https://www.haomeiwen.com/subject/thcggrtx.html