vue中watch的使用问题

本文探讨了在Vue框架中使用watch属性与原生事件监听器的性能差异,建议优先使用原生事件以提升应用性能。同时,文章详细分析了watch数组时可能出现的诡异现象,并给出了解决方案。

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

建议

1、如果有change原生事件尽量用原生,不要用watch,毕竟watch只是封装了一层,性能各方面不如原生方法。
2、尽量不要watch数组,如果非得监控数组的变化,就设置一个flag,数组变flag变,watch对应的flag来处理。

watch数组的一个奇怪现象

当前有两个数组:

tempY = ["label1", "label2", ... ,"labeln"]
tempZ = [
	[10, 11, 12], [20, 21, 22], ... , [100, 101, 102]
]

最开始将这两个数组赋给2个变量

y = tempY
z = tempZ

然后修改数组的值

tempY.push("label123")
tempZ.push([123, 456, 789])

同时使用watch观察四个量的变化

watch: {
	y (val1, val2) {
	  console.log(val1, val2) // tempY.push("label123")时触发,且val1和val2相同。
	},
	tempY (val1, val2) {
	  console.log(val1, val2) // tempY.push("label123")时触发,且val1和val2相同。
	},
	z (val1, val2) {
	  console.log(val1, val2) // 不会触发打印
	},
	tempZ (val1, val2) {
	  console.log(val1, val2) // tempZ.push([123, 456, 789])时触发,val1比val2多[123, 456, 789]
	}
}

由上可知 z 和 tempZ 是正常的,但是 y 和 tempY 见鬼了样的。
因为数组是指向变量,所以 tempY 变了 y 会跟着变所以同时触发吗?
但是为什么 z 和 tempZ 又不满足这个原因呢,因为是二维数组吗?
为什么呢???
综上所述,建议见2:尽量不要watch数组!

Vue 3中,watch使用方式有所改变Vue 3引入了一个新的API即`watchEffect`,它可以用来监听响应式数据的变化并执行相应的操作。 `Effect`函数接受一个回调函数作为参数,该调函数会在响应式数据发生化时被调用。在回调函数,你可以执行任何需要的操作,比如更新DOM、发送网络请求等。 下面是一个使用`Effect`的示例: ```javascript import reactive, watchEffect } from 'vue'; const state = reactive({ count: 0, }); watchEffect(() => { console.log('count changed:', state.count); }); // 修改count的值 state.count++; // 输出:count changed: 1 state.count++; // 输出:count changed: 2 ``` 在上面的示例中,我们创建了一个响应式对象`state`,其中包含一个属性`count`。然后,我们使用`watchEffect`来监听`state.count`的变化,并在每次变化时打印出新的值。 除了`watchEffect`,Vue 3还提供了`watch`函数,它可以用来监听指定的响应式数据或计算属性的变化。与Vue 2中的`$watch`方法类似,你可以通过传递一个回调函数和可选的配置选项来使用它。 下面是一个使用`watch`的示例: ```javascript import { reactive, watch } from 'vue'; const state = reactive({ count: 0, }); watch( () => state.count, (newValue, oldValue) => { console.log('count changed:', newValue); } ); // 修改count的值 state.count++; // 输出:count changed: 1 state.count++; // 输出:count changed: 2 ``` 在上面的示例中,我们使用`watch`来监听`state.count`的变化,并在每次变化时打印出新的值。回调函数的第一个参数是新的值,第二个参数是旧的值。 总结一下,Vue 3中的watch使用方式有两种:`watchEffect`和`watch`。`watchEffect`用于监听响应式数据的变化,而`watch`用于监听指定的响应式数据或计算属性的变化。 --问题--: 1. Vue 3中的watch有哪些使用方式? 2 如何使用watchEffect来监听响应式数据的变化? 3. 如何使用watch来监听指定的响应式数据或计算属性的变化?
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值