vue3+el-select的watch监听回调触发多次问题

vue3+el-select的watch监听回调触发多次问题

背景:

​ 当时的需求实:通过选择下拉框,改变当前充电桩对象,监听对象变化是刷新表格(echarts)的数据;

​ 结果问题出现:当我选择下拉框中的函数时,watch()中的刷新表格执行了两次。

  • 第一次回调,对象的id变化;
  • 第二次回调,对象的name和type属性变化(该变化赋值于另一方法中实现);

原因:

​ 通过仔细排查发现,原来是因为:

  • 在elementplus组件的el-select的@change函数调用时,会对v-model的值进行赋值,导致第一次改变了对象的id,从而引发回调函数;
  • 在@change=“handler()”的handler方法中,我又对对象的其余属性进行赋值,从而第二次触发了回调函数。

最终导致,两次执行回调的时候,对象的type字段不一致(尚未更新,更新在handler()中才完成),于是刷新了两次图标,导致正确的图表被覆盖的问题;

问题解决方法:

​ 意识到是对象的属性变化没有保持原子性的问题,在两个地方重复变化。于是我将el-select的v-model抽离出来,单独定义一个变量来接收当前选择的id编号,并将该编号的值初始化为当前充电桩的id。

image-20230628140705491

​ 而充电桩对象的各个属性变化,统一在handler()方法中进行赋值。

最终解决,回调函数执行一次!

image-20230628140408237image-20230628140453104

image-20230628140524346此处改变对象其余属性

经验总结:

posted @   devynlime  阅读(1423)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示