vue中watch的使用问题

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

建议

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数组!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值