computed计算属性和watch监听总结

本文总结了Vue中computed计算属性和watch监听的区别与应用场景。computed用于自动更新依赖属性的值,具备get和set方法,适用于简单的属性计算。watch则是命令式监听,适合处理复杂异步操作和副作用。二者设计模式和响应行为不同,使用时应根据需求选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在开发中常用到计算属性和监听属性,虽然两者实现的功能很相似,但是还是有一定差别的,以下总结了computed计算属性和watch监听。
1、computed计算属性
计算属性就是当其依赖属性的值发生变化时,这个属性的值会自动更新,与之相关的DOM部分也会同步更新。

//计算属性是根据data中已有的属性,计算得到一个新的属性,
var vm=new Vue({
	  el:"#app",
	     data:{
          firstname:"李",
          lastname:"四",
        },
        computed:{
			fullName:{
					return this.firstname+this.lastname
			}
		}
})

(1)get
基础写法只有get,代码写法简单,在getter函数内return计算结果。
例如:

var vm = new Vue({
	el: '#demo',
	data: {
    firstName: 'Foo',
    lastName: 'Bar'
  },
  computed: {
    // 计算属性的 getter
    fullName: function () {
      // 1、`this` 指向 vm 实例
      // 2、return计算结果
      return this.firstName + ' ' + this.lastName
    }
  }
})

(2)set

computed: {
  fullName: {
    // getter
    get: function () {
      return this.firstName + ' ' + this.lastName
    },
    // setter
    set: function (newValue) {
      var names = newValue.split(' ')
      this.firstName = names[0]
      this.lastName = names[names.length - 1]
    }
  }
}

(1)创建计算属性通过computed关键字,它是一个对象。
(2)computed是对data中的一些数据进行操作,从而获得一个新的属性,避免在标签中进行操作。
(3)计算属性computed可以监听多个data对象里面的变量。
(4)compulate有两个方法:get 和 set。当计算属性改变时会触发set函数,从而改变data中的数据。

2、watch监听
watch属性和computed属性类似,是为了监听data中的数据的变化,只要监听的数据一发生变化,它就能执行相应的函数,

//监听data中已经有的数据,当数据变化时触发。
   new Vue({
            el:"#app",
            data: {
                person:{
                    value:"allen"
                }
            },
            watch:{//监听器
                person:{
                    immediate:true,//初始化的时候就监听操作
                    deep:true,//深度监听  内部的属性发生变化了,也会被检测到
                    handler(){
                        console.log("person发生改变了哦...")
                    }
                }
            }
        })

(1)watch属性的名字必须为data中对应数据的名字。
(2)Watch 是一种命令式的解决方案,我们需要自己处理 vue
某个属性依赖要素的变化,根据变化重置这个属性。

3、两者不同
(1)设计模式不同
Computed 是一种声明式的解决方案,我们只需要告诉 vue 某个属性的构成方法,就可以一劳永逸的放手不管了。

computed: {
  fullName: function () {
    return this.firstName + ' ' + this.lastName
  }
}

Watch 是一种命令式的解决方案,我们需要自己处理 vue 某个属性依赖要素的变化,根据变化重置这个属性。

watch: {
  firstName: function (val) {
    this.fullName = val + ' ' + this.lastName
  },
  lastName: function (val) {
    this.fullName = this.firstName + ' ' + val
  }
}

(2)响应行为不同
Computed 的响应是 deep 的响应,即在计算过程中用到的对象的属性发生变化,是可以被监听到的。然而,一旦 Computed 没有在模板中使用,vue 是不会为我们计算 Computed 内容的。

computed: { fullName: function () {
// this.name 的属性 firstName/lastName 变化时 fullName 会响应。
return this.name.firstName + ’ ’ + this.name.lastName } }

Watch 的响应默认为非 deep 的响应,即观测的是某个对象的字面量。当然,我们可以为 Watch 设置 deep 响应类型或是监听其属性。

watch: {
  name: function () {
    // this.name 的属性 firstName/lastName 变化时不会触发。
    // TODO
  }
}

4、总结

两者的使用应当是互补的:

在获得较为简单的属性,且用于展示时,用 computed 可以简化书写。

在进行比较复杂的异步操作,或有比较明显的副作用时,用 watch 逻辑更清晰。

另外,需要注意的是,watch 的计算早于同依赖的 computed.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值