杂记之computed和watch

computed(计算属性)

computed 是 Vue.js 中一个计算属性的 API,它能够帮助我们定义计算属性和缓存计算结果。

  • computed 可以定义函数式的计算属性,也可以定义对象式的计算属性。例如:
  // 对象式的计算属性
  computed: {   
  	fullName() {
       return this.firstName + ' ' + this.lastName   
       } }
   // 函数式的计算属性 
   computed: {   
   fullName: function() {
       return this.firstName + ' ' + this.lastName   
       } }
  • computed 的计算属性可以依赖于一个或多个响应式数据,只有当依赖的数据发生变化时,才会触发计算属性重新计算值。例如:
data: {   
firstName: 'John',   lastName: 'Doe' 
},
computed: {   
	fullName() {
       return this.firstName + ' ' + this.lastName   
       },   
    age() {
       return new Date().getFullYear() - this.birthYear  
       } }, 
watch: {   
	birthYear: function(val) {
       // birthYear 改变时,age 会重新计算
       this.age = new Date().getFullYear() - val   
       } }
  • computed 的计算属性会缓存计算结果,有当依赖的数据发生变化时,才会重新计算值,否则会接返回缓的值,提高了性能和效率。
  • computed 的计算属性可以设置 get 和 set 方法,用于获取和设置计算属性的值。例如:
computed: {   
	fullName: {
       get() {
         return this.firstName + ' ' + this.lastName
       },
       set(value) {
         let names = value.split(' ')
         this.firstName = names[0]
         this.lastName = names[1]
       }   
   	} 
}
  • computed 的计算属性可以与 watch 监听器配合使用,实现更加复杂的数据操作。例如:
data: {  
   firstName: 'John',   lastName: 'Doe',   fullName: '' 
   }, 
computed: {  
   fullName() {
       return this.firstName + ' ' + this.lastName   
       } }, 
watch: {   
	fullName: function(val) {
       console.log('Full name changed to:', val)   
    } } 

在上面的代码示例中,我们定义了一个 fullName 计算属性,它依赖于 firstName 和 lastName 两个响应式数据,并返回一个拼接后的字符串。在 watch监听器中,我们监听了 fullName 计算属性的变化,并输出了变化后的值。

通过 computed 和 watch 的组合,我们可以实现更加复杂的数据操作,例如: watch 监听器中更新其他数据,或者在 computed 计算属性中对数据进行过滤或排序等操作,从而实现更加灵活和高效的数据处理方式。

watch(监视属性)

在 Vue.js 中,watch 的格式通常为一个对象,对象的属性为要监听的属性名称,值为一个回调函数。例如:

watch: {
  // 监听 message 属性
  message: function (newValue, oldValue) {
    console.log('message 属性发生变化了,新值为:', newValue)
  }
}

在上述代码中,我们定义了一个 watch 属性,用于监听 message 属性的变化。当 message 属性发生变化时,回调函数会被执行,同时会传入两个参数 newValue 和 oldValue,分别表示变化后的值和变化前的值。

除了使用简单的函数形式,watch 还支持使用字符串形式和对象形式进行定义和配置。其中,字符串形式可以用来监听方法名,对象形式可以用来配置更多选项,例如深度监听、立即执行等。例如:

// 字符串形式
watch: {
  'message': 'handleMessageChange'
}

// 对象形式
watch: {
  // 监听 message 属性
  message: {
    handler: function (newValue, oldValue) {
      console.log('message 属性发生变化了,新值为:', newValue)
    },
    deep: true
  }
}

需要注意的是,当 watch 监听的属性是一个对象或数组时,需要设置 deep 选项为 true 才能深度监听内部属性的变化。

computed 和 watch 的区别

computed 和 watch 都是 Vue 中用来响应数据变化并更新视图的机制,二者的区别如下:

  • computed 是计算属性,它会根据依赖的数据属性进行计算,并缓存计算结果,只有依赖的数据属性发生变化时才会重新计算;而 watch
    是监听属性,它会在监听的数据属性发生变化时立即执行回调函数。
  • computed 是声明式的,它的值是通过计算得到的,而不是手动赋值的;而 watch 是命令式的,它需要手动编写回调函数来处理数据变化。
  • computed 通常用于计算一个值,而 watch 通常用于监听一个值的变化并进行相应的操作。

因此,当需要计算一个值并在模板中使用时,应该使用 computed;当需要监听一个数据属性的变化并进行相应的操作时,应该使用 watch。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值