vue中的watch和computed

Computed本质是一个具备缓存的watcher,依赖的属性发生变化就会更新视图。适用于计算比较消耗性能的计算场景。当表达式过于复杂时,在模板中放入过多逻辑会让模板难以维护,可以将复杂的逻辑放入计算属性中处理。

Watch没有缓存性,更多的是观察的作用,可以监听某些数据执行回调。当我们需要深度监听对象中的属性时,可以打开deep:true选项,这样便会对对象中的每一项进行监听。这样会带来性能问题,优化的话可以使用字符串形式监听,如果没有写到组件中,不要忘记使用unWatch手动注销哦

Watch监听数据变动的方法:
1.普通数据

data() {
   	 return {
        num: 0    
    }
 }, 
watch: {
    num(newValue, oldValue) {
        console.log(newValue)
    } 
}

2.监听对象内部属性的变化有三种方式:
第一种添加deep:true:

data(){
	return{ 
    	cityName: {id: 1, name: 'shanghai'}
	}	
}
watch: {
   cityName: {
     handler(newName, oldName) {
     // ...
   },
   deep: true,//是否深度监听
   immediate: true//是否在首次watch绑定数据的时候就执行一次handler
 }

第二种使用字符串形式:

data(){
	return{ 
    	cityName: {id: 1, name: 'shanghai'}
	}	
}
watch: {
  'cityName.name': (newName, oldName) {
    // ...
  },

第三种可配和computed使用:

data(){
	return{ 
    	cityName: {id: 1, name: 'shanghai'}
	}	
},
 computed:{
	name(){
		return this.cityName.name;
	}
},
watch: {
 	name(newName, oldName) {
     // ...
   },
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值