求助, vue 轮询请求更新数据渲染时闪烁

2019-07-05 09:06:49 +08:00
 SanGo
我遇到一个问题,做一个监控平台,采用轮询请求更新 data,但是由于相关联的视图试用 vfor 渲染的,更新视图时会导致闪烁更新,搜过狗哥也没解决方案,还请大佬们指点一下
6329 次点击
所在节点    程序员
47 条回复
jorneyr
2019-07-05 09:10:52 +08:00
试试 throttle 或者 debounce 进行节流,避免频繁更新,可以使用 underscore 或者 lodash 的实现,也可以自己实现这 2 个函数,参考 https://underscorejs.org/#throttle
NaVient
2019-07-05 09:13:18 +08:00
是你想的太复杂了把,这不就是更新数据先声明成临时变量,再循环去看页面数据和更新数据不同的地方,更新数据变更的项不就行了吗?
clandyuki
2019-07-05 09:14:13 +08:00
加上 key
SanGo
2019-07-05 09:29:24 +08:00
@jorneyr 是定时更新的,所以不用节流
SanGo
2019-07-05 09:31:52 +08:00
@NaVient 绑定的 data 发生变化,就会重新触发 v-for 去渲染导致闪烁
@clandyuki vfor 加 key 很常规啊。。。
15651980765
2019-07-05 09:34:22 +08:00
v-for 的时候绑定 key,值用数据的 id,不要用遍历的索引,这样可以保证数据变化后可以最大程度复用之前的 DOM。
NaVient
2019-07-05 09:35:00 +08:00
@SanGo #5 你不变更 data 整体,变更 data 的一个 index 不会触发的,VUE 内部是根据 key 去更新的
shenyu1996
2019-07-05 09:37:32 +08:00
是不是 data 更新前顺便赋了个 null
TrickWu
2019-07-05 09:44:34 +08:00
照理不会闪烁的,是根据 data 变化来触发视图更新,应该是你代码写的有问题
Vegetable
2019-07-05 09:46:24 +08:00
上代码吧兄弟
cuzfinal
2019-07-05 09:49:15 +08:00
这种引发列表重新渲染的肯定是用了不稳定 key,代码都不用看。
no1xsyzy
2019-07-05 09:58:53 +08:00
先复制一份然后尽可能缩,产生一份最小可复现样本。
如果如 #8 所言,或者类似地更新操作导致 data 暂时地不可用化,应该会在 console 里有报错,或者有 v-if="data"。
另外闪烁的样子录个 gif 吧,有可能甚至跟前端无关,是硬件跟不上也有可能。
qiaobeier
2019-07-05 09:59:52 +08:00
尝试闪烁的节点上加上 css 属性 transform: translateZ(0);
f056917
2019-07-05 10:00:09 +08:00
我的 key 都是 item.index,而且很少使用
jorneyr
2019-07-05 10:01:26 +08:00
代码那点破事真不是难事,码农更重要的是学会沟通,不要抱怨没人回答你的问题,
首先需要学会如何提问,其他人才能更好的理解你的问题。

如何有效地提问:
- 你做了什么,怎么做的
- 你查过什么资料,怎么说的
- 你是怎么设计的
- 贴出你的代码
- 编译错误是什么
- 代码截图,错误截图
- 结果有什么错,你期望的结果是什么
- 你是怎么想的

回答你的问题是情义,不理你是我的权力,没有人有义务要帮助你
你是在寻求帮助,态度好点,但也不要委屈自己

最后,如果你啥都不会,或者只会一点基础,不要期望我们告诉你怎么做
sugars
2019-07-05 10:16:21 +08:00
楼上正解,就提问者提供的信息,不够详情,无从下手(就这情况,更新时加了动画 css 也不是不可能)
a852695
2019-07-05 10:18:35 +08:00
能否贴个 GIF 和对应的部分代码,这样问题也好定位
SanGo
2019-07-05 10:43:12 +08:00
不知道 V2EX 怎么上图。。。
SanGo
2019-07-05 11:07:18 +08:00
我现在把这边的 key 改成了 index 了,依然会导致闪烁 Orz
https://s2.ax1x.com/2019/07/05/ZawEy4.png
SanGo
2019-07-05 11:07:51 +08:00
@sugars css 没加=-=。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/580182

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX