初步探索vue3之vue3中不一样的watch

vue3(3.0.4)中watch 使用

1. watch监听 ref 定义的响应式数据
setup() {
		let name = ref("张三");
		
        
		watch(name, (newValue, oldValue) => {
			console.log(newValue, oldValue);
		});

		return {
			name,
		};
	},
2.watch监听 ref 定义的多个响应式数据
setup() {
		let name = ref("张三");
        let msg = ref('hello')
		

		watch([name,msg], (newValue, oldValue) => {
			console.log(newValue, oldValue);
		});

		return {
			name,
            msg
		};
	},
或者 vue3可以同时出现多个watch
setup() {
		let name = ref("张三");
        let msg = ref('hello')
        
		watch(name, (newValue, oldValue) => {
			console.log(newValue, oldValue);
		});
		
		watch(msg, (newValue, oldValue) => {
			console.log(newValue, oldValue);
		});

		return {
			name,
            msg
		};
	},
3.watch监听 reactive 定义的响应式数据的全部属性
setup(props) {
		let name = ref("张三");
        let msg = ref('hello')
		let obj = reactive({
			a: 18,
			b: {
				c: {
					d: 23,
				},
			},
			g: 25
		});

		watch(name, (newValue, oldValue) => {
			console.log(newValue, oldValue);
		});
		watch(msg, (newValue, oldValue) => {
			console.log(newValue, oldValue);
		});

		watch(obj, (newValue, oldValue) => {
            console.log('obj已经变化了');
			console.log(newValue, oldValue);
		},{deep:false});

		return {
			name,
			obj,
            msg
		};
	},

这里需要注意的是(vue 3.0.4) 时
obj是一个对象时 newValue 和 oldValue 的值是相同的都为newValue 即无法获取oldValue
当obj对象有多层时也可以监听到 但是 deep:false 是无效的

4.watch监听 reactive 定义的多个响应式数据的某个属性

监听单个obj中的某一个属性时 需要时一个有返回值的函数

watch(()=>obj.a, (newValue, oldValue) => {
			console.log(newValue, oldValue);
			//obj已经变化了
			//Proxy {age: 19} Proxy {age: 19}
		});

如果监听的某个属性为多层时 此时需要配合 {deep:true} 才能监听到值的变化
但是依旧无法获取旧值

watch(()=>obj.b, (newValue, oldValue) => {
			console.log(newValue.c.d, oldValue.c.d);
		},{deep:true});
5.watch监听 reactive 定义的多个响应式数据的某些属性

监听多个时 可以为数组 也可以写为多个watch

watch([()=>obj.a,()=>obj.g], (newValue, oldValue) => {
			console.log(newValue, oldValue);
			//obj已经变化了
			//Proxy {age: 19} Proxy {age: 19}
		});

watchEffect

watchEffect 新增的一个特殊函数
默认一开始就会执行一次 只要是函数的引用的变量发生变化 整个函数就会执行一次
有点类似 computed 但又不需要返回值

watchEffect(()=>{
            let a = obj.b.c.d
            console.log('123');
        })
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值