文档管理中心
|

ArkUI

LazyForEach 搭配 @Reusable 之后,列表滑动时数据开始串了,咋回事?

大佬们好,我在做列表优化,之前用 ForEach 全量渲染太卡了,看官方文档说要用 LazyForEach + @Reusable 来做组件复用。

改完代码之后滑动确实流畅了不少,但新问题来了——数据开始串了

具体表现是:快速滑动列表的时候,有时候 A 项的位置显示的是 B 项的内容,或者某个 Item 里的图片配的文字对不上。一开始以为是数据源的问题,打印了一下发现数据源本身是对的,问题出在 UI 渲染层。

我看了一下 @Reusable 的文档,里面有个 aboutToReuse 回调,说是“在复用组件即将被重用的时候触发,用于更新组件的状态”。但我没太理解这个回调的正确用法——我直接在 aboutToAppear 里更新 UI 数据,是不是因为组件被复用的时候 aboutToAppear 不会再触发,所以数据还停留在上一个 Item 的状态?

想请教几个问题:

  1. @Reusable 标记的组件被复用时,生命周期是怎么走的? aboutToAppear 还会再触发吗?如果不会,那我应该在哪个回调里更新 UI 数据?

  2. aboutToReuse 回调的正确用法是什么? 我看到文档说这个回调里可以拿到复用时的参数,具体应该怎么用?是不是在这个回调里把新数据赋值给组件内部的 @State 变量?

  3. 如果列表项里包含了图片加载,组件复用时图片会不会因为异步加载导致“旧图闪一下再变新图”的问题?怎么避免这种闪烁?

  4. LazyForEach 的数据源需要实现 IDataSource 接口,这个接口里的 getData 方法返回的数据,跟 @Reusable 组件里实际显示的数据之间,是怎么关联的?如果数据错乱了,是不是因为 getData 返回的索引和实际渲染的索引对不上了?

  5. 我看到有人说 @Reusable 搭配 @ObjectLink 比搭配 @State 更稳,这个说法对吗?为什么?

这个问题说大不大,但列表数据串了直接影响用户浏览,体验很糟糕。希望有经验的大佬指点一下,谢谢!

点赞
2
收藏
回复
4
分享
举报
浏览59 发布于3天前天津
全部评论
最多点赞
最新发布
最早发布
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要提问题

了解社区公约,与您携手共创和谐专业的开发者社区。