前端开发记录,vue watch的新认识

说白了,Vue是一块功能强大的手表,但很容易出问题。
重要的是要知道何时使用它们以及何时避免它们。

展开,我们首先讲最重要的两点:触发条件和伟大的监控。
当然,数据改变会触发回调,但是空更新(比如返回相同的字符串)也会触发回调。
在我们去年运行的时候,服务请求的数量增加了一倍。
说实话,这很烦人。
另一点是很好的监控。
高:对于对象的内部更改必须为真。
然而去年的一项测试发现,监控3 000层嵌套的衣服会直接将FPS拖到1 0以下。
在随机情况下,这种效果被称为SNOW CASE。
在迹象面前犹豫了一下。

一开始以为下一个会有用,后来发现初始化时引发回调直接导致组件持续1 秒,这样就可以直接返回监控API了。
等等,还有别的事。
计算属性作为中间体确实很优雅,但计算属性本身也可能很慢,具体取决于具体情况。

结束:建议先看客户数据。
如果你可以使用电脑,就不要使用手表。
如果不起作用,请使用深度。
它具有代替普通手表的效果,可以省去很多工作,但别忘了加个防震装置,免得频繁情况打扰。

vue3中的watch

记得上次重构项目的时候,需要实时同步购物车数量和用户名。
当时正在学习Vue3 ,想着用watch来实现。

JavaScript watch(['cartCount', '用户名'], (newValues, oldValues) => { console.log('newValues:', newValues); // [1 0, '张三'] console.log('oldValues:', oldValues); // [5 , '李思'] });
调试时发现,当cartCount从5 变为1 0、userName从“李思”变为“张三”时,newValues和oldValues都是数组,且顺序与监听顺序完全一致。
这很有趣,不是吗?可以准确捕获对表的更改。

等等,还有一件事。
我注意到,如果数组中有一个属性没有改变,比如这次userName还是'张三',那么oldValues对应的元素就是最后一个值。
这个细节相当重要,可以避免对每个元素做出额外的判断。

我突然想到,如果监控的数组很长,比如有十个属性,那么newValues和oldValues也是长度为十的数组,回调函数必须一一比较,找出哪一个发生了变化。
有更优雅的方式吗?比如直接使用解构赋值?
JavaScript watch(['cartCount', 'userName'], ({ cartCount, userName }, { cartCount: oldCartCount, userName: oldUserName }) => { console.log('cartCount 修改:', cartCount !== oldCartCount); console.log('用户名已更改:', 用户名 !== oldUserName); });
这样是不是清楚多了?但必须保证数组顺序和属性名完全相同,否则会出现解构错误。
这就提出了另一个问题:是否有一种更通用的方法可以正确地解构它,而不管属性的顺序如何变化?

Vue中export default如何配置组件的watch

坦率地说,设置 Vue 手表非常简单,但有一些陷阱需要注意。

说白了,监控就是当数据发生变化时做一些事情。
直接下载代码:
javascript 导出默认值{ 数据(){ 返回{计数:0}; }, 观看:{ 帐户(新值,旧值){ console.log('帐户更改:', newVal, oldVal); } } };
如需深度监控,请添加deep: true,例如:
javascript 导出默认值{ 数据(){ 返回 { obj: { a: 1 } }; }, 观看:{ 对象:{ 处理程序(新值,旧值){ console.log('修改后的对象:', newVal, oldVal); }, 深:真实 } } };
Vue3 可以直接使用数组:
javascript 导出默认值{ 数据(){ 返回 { 计数: 0, 对象: { a: 1 } }; }, 观看:[ { 处理程序:'handleCountChange',道具:'count',立即:true }, { handler: (newVal, oldVal) => console.log('obj.changed:', newVal, oldVal), prop: 'obj.a', deep: true } ], 方法:{ 处理计数更改(newVal){ console.log('账户修改:', newVal); } } };
但不要盲目使用deep,性能会爆炸。
Immediate一般用于初始化和同步数据。

上周刚刚处理了一个表单提交,直接用watch来监控整个表单主题。
结果deep: true卡住了三秒。
后来我改用微积分来验证,瞬间就快了。

你的防抖例子写得很好,但是记得在卸载之前清空定时器,否则组件卸载后定时器还在运行就会出现内存泄漏。

说实话,大多数场景下,直接使用计算就足够了,手表最多只能监控几个关键值。
您的计时器示例实际上可以通过使用直接观察者进行优化并进行计算。

obj.a 是基本类型。
直接监听obj.a路径就可以了,不需要调整那么多。
这是第一个。