HarmonyOS 列表刷新问题
目前页面为三层结构 Swiper中按页加载了TestComponent, TestComponent中ForEach添加TestTextComponent,
ForEach依赖的数据类型为class TestVideoModelArray extends Array<TestVideoModel>
现象
1、TestVideoModelArray添加元素, 触发TestTextComponent的onAppear显示, 无疑问
2、修改TestVideoModelArray中元素的属性, 不触发TestTextComponent的onAppear. 直接刷新TestTextComponent的内容, 无疑问
3、同时TestVideoModelArray添加和修改TestVideoModelArray中元素的属性, 同时触发修改和添加位置TestTextComponent的onAppear? 为什么单独修改属性不会触发所属位置的onAppear, 同时添加修改就会触发修改位置的onAppear?
问题
同时修改添加不应该场景一个新组件, 然后只刷新老组件. 为什么同时创建两个新组件(触发onAppear)?
单独添加、单独修改和同时添加修改本质上有什么区别, 为什么有不同的现象?
同时添加和修改的场景如何只触发新添加的元素的onAppear, 而老元素内容刷新?
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
HarmonyOS 页面跳转刷新问题
140浏览 • 1回复 待解决
HarmonyOS List item 刷新问题
234浏览 • 1回复 待解决
NativeWindowFlushBuffer接口刷新问题
1637浏览 • 1回复 待解决
HarmonyOS使用Refresh下拉刷新问题
232浏览 • 1回复 待解决
HarmonyOS overlay机制调用后界面刷新问题
188浏览 • 1回复 待解决
刷新列表加载更多问题
44浏览 • 1回复 待解决
Web组件加载在线页面存在2次刷新问题
206浏览 • 1回复 待解决
鸿蒙页面检测不到数据发生改变的刷新问题,能否强制刷新
9168浏览 • 1回复 待解决
HarmonyOS 关于objectLink在数组对象中使用时,修改数据页面不刷新问题
137浏览 • 1回复 待解决
HarmonyOS Grid容器视图更新问题
147浏览 • 1回复 待解决
列表局部刷新,有人知道怎么处理吗?
513浏览 • 1回复 待解决
HarmonyOS 列表展示list懒加载问题
133浏览 • 1回复 待解决
HarmonyOS List组件动态刷新数据问题
81浏览 • 1回复 待解决
HarmonyOS tabs + TabContent 框架刷新数据的问题
200浏览 • 1回复 待解决
wifiManager.getScanResults() 刷新扫描列表很慢怎么回事?
3261浏览 • 1回复 待解决
卡片数据更新问题求大佬解答
4947浏览 • 1回复 待解决
HarmonyOS Grid组件使用ForEach网格布局,Ui数据更新问题
179浏览 • 1回复 待解决
HarmonyOS H5的JS端调用应用端的新问题
155浏览 • 0回复 待解决
getScanInfoList 扫描结果非实时,有缓存,目前如何刷新列表
105浏览 • 1回复 待解决
List列表 编辑问题,List列表如何开启拖动功能。
522浏览 • 1回复 待解决
关于获取应用列表权限问题?
3135浏览 • 1回复 待解决
HarmonyOS LazyDataSource加载更多的时候如何不整个列表刷,而只刷新后续加入的
153浏览 • 1回复 待解决
@Builder参数值改变UI没有刷新问题,代码如下,点击按钮“年龄+1”,年龄数值并没有发生改变,是什么原因呢
300浏览 • 1回复 待解决
关于权限列表条目缺少问题
1708浏览 • 1回复 待解决
HarmonyOS ForEach局部刷新
94浏览 • 1回复 待解决
问题原因是这样的:
程序启动时,是调用struct TestComponent的ForEach方法循环遍历数组videoModels生成列表
因为ForEach方法中没有键值生成函数,所以框架默认的键值生成函数为(item: T, index: number) => { return index + '
’ + JSON.stringify(item); }
我们可以输出这个值,得到第一项的key为:
0{“borderWidth”:2,“pos”:{“y”:{“y”:0}},“streamInfo”:{“name”:“111”,“pos”:{“y”:{“y”:0}}}}
可以发现其中包含了要修改的值name;然后改变了第一项的值,新增一项是,依然是调用这个ForEach方法,此时第一项的key为:
0__{“borderWidth”:2,“pos”:{“y”:{“y”:0}},“streamInfo”:{“name”:“改变元素 streamInfo”,“pos”:{“y”:{“y”:0}}}}
与之前的key不一样了,所以会新创建一个组件,由于位置不变,就把老组件覆盖掉了;
第二项和第三项没有任何修改,所以key值不变,不会新建;最后创建一个新添加的新组件;所以整个过程触发了两次onAppear;
解决方案:在ForEach方法末尾加入键值生成函数,比如"(item:string) => item",让键值不会因变量的改变而变化,就不会出现该问题现象了
参考文档:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-rendering-control-foreach-V5#%E9%94%AE%E5%80%BC%E7%94%9F%E6%88%90%E8%A7%84%E5%88%99