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 @ 2023-06-30 14:07  devynlime  阅读(1280)  评论(0编辑  收藏  举报