当前位置: 首页 > news >正文

【问题记录】【排查问题的方法总结】vue3中数据失去响应式?为什么数据变了,视图只更新了一次就不再更新了?

一、问题概述:

持续请求的数据变动之后,控制台输出绑定的响应式变量 mapObj 的确变了,但是视图上只更新了一次,后续就不再更新了。

二、排查过程:

PC上用定时器setInterval模拟数据(全是小于0的数据)更新,视图的确响应了。 -- bug无法复现

手机上控制台输出关键信息,输出内容一切都符合预期,但是视图层面上只有部分组件数据更新了,有几个组件的数据只更新了一次,后续再也不更新。--bug偶现。

前期很快定位到:

数据响应式失效了,视图层失去了响应。

尝试解决方案:

reactive 改用 ref 来包装对象 -- 未解决

对象直接赋值,改为对象内部属性赋值 -- 未解决

vm.$forceUpdate() 迫使Vue实例重新渲染 -- 未解决

。。。

成功解决:

排查好几天之后,尝试将当前处理过的数据未处理的原始数据同时绑定在组件上,比对成功!处理过的数据视图不更新,但是未处理的原始数据终于响应式更新了。--bug已定位。

再通过比对当前处理过的数据和未处理的原始数据区别,即可发现数据更新之后所执行的函数内部有一个逻辑会执行 el.innerText = el.innerText.trim() 数据转换,并且仅当数据大于0的时候进入到这行代码注释该行代码,数据恢复响应,问题解决。--bug成功解决。

三、反思总结

解决问题并不难,难的是排查问题。

其实最终的解决方案一点也不🐮👃,就是注释一行错误代码,可以说一点营养🥛也没有。

但是这个问题解决的过程却是特别漫长,其中的干扰因素太多、尝试过的解决手段也很多、瞎JB乱想的因素更多(例如什么vue框架本身的响应延迟等等,更是走了很多弯路)。

所以既然花了那么多时间去解决了这个问题,这个问题必定可以榨出一些营养出来的。

这次排查耗时这么久总结出来最关键的2个点,后续一定要牢记:

1、比对问题要全面!

该问题当中有出现正常和异常的两种表现,但是当时只注意到对象key值的不同,却没注意到对象value值的不同。

这就好像我们小时候玩的两幅画找不同的游戏一样,只找出了其中一处不同点(还是错误的方向),没发现还有很多其他不同的点!

当时如果注意到大于0异常,小于0正常,这一特性的话,定位问题就简单多了。

不过当时数据也少,的确很难察觉到会是伴随着数据value不同而出现,这个倒也无可厚非。

2、模拟问题要干净!

模拟问题的时候不够彻底的干净,这是最最最最最最最最最最最最致命的错误!

当很快定位到是数据响应式问题的时候,应该直接模拟将原数据绑定在组件dom上,而不是包了一层handler函数的数据。

// 演示代码import { handlerFn } from ../XXXconst mapObj = ref({});const changeInterval = setInterval(()=>{mapObj.value[key] = newValue;
}, 3000);// 错误的模拟方式
<div>{{ handlerFn(mapObj[key]) }}</div>// 正确的模拟方式
<div>{{ mapObj[key] }}</div>// 进阶模拟方式 - 比对定位
<div>{{ handlerFn(mapObj[key]) }} - 我是分割符 - {{ mapObj[key] }}</div>

下班下班,周五愉快 ~  🎉 🎉 🎉 

 

http://www.lryc.cn/news/19097.html

相关文章:

  • 基于遗传算法的柔性生产调度研究(Matlab代码实现)
  • Heroku的12条准则
  • Qt图片定时滚动
  • 深度学习引言
  • ESP32 WIFI使用介绍
  • JavaEE简单实例——MyBatis的一对一映射的嵌套查询的简单介绍和基础配置
  • 详解指针(进阶版)(1)
  • 【OJ】盐荒子孙
  • Java数据结构 —— 手写线性结构(稀疏数组、栈、队列、链表)
  • docker部署gitlab过程中遇到的一些问题记录
  • 数组的定义与使用
  • SAP ABAP用程序删除开发KEY
  • 安卓设备TF卡概率性无法识别问题
  • linux安装nodejs和微信小程序自动化部署操作
  • JavaScript高级 Proxy Reflect
  • Eth-trunk :LACP模式链路聚合实战
  • 【第二章 - 线性表之顺序表】- 数据结构(八千字详解)
  • 【史上最全面esp32教程】RGB彩灯篇
  • 大规模 IoT 边缘容器集群管理的几种架构-5-总结
  • 逆风翻盘拿下感知实习offer,机会总是留给有准备的人
  • SpringBoot整合阿里云OSS文件上传、下载、查看、删除
  • 对话数字化经营新模式:第2届22客户节(22Day)年猪宴圆满结束!
  • 数据结构——第二章 线性表(5)——双向循环链表
  • 4面美团软件测试工程师,却忽略了这一点,直接让我前功尽弃
  • robot remote server用这个server去远程获取ip
  • 【WSL】Windows 上安装并启动
  • SAFe(Scaled Agile Framework)学习笔记
  • Redis 集群搭建
  • 【Unity VR开发】结合VRTK4.0:创建物理按钮
  • 【软件测试】web自动化测试如何开展合适?自动化测试用例如何设计?资深测试的总结......