在 OpenHarmony(ArkUI) 中,列表组件的“回收”本质上是由系统 自动完成 的,开发者一般不需要手动销毁,只需要正确使用列表组件和键值即可。下面分场景说明。
List() {
ForEach(this.dataList, (item) => {
ListItem() {
Text(item)
}
}, item => item.id)
}
回收原理:
List 内部使用 虚拟化(Lazy ForEach 类似机制)ListItemListItem 会被自动回收复用✅ 重点:
index 作为 key(会导致回收异常)List() {
LazyForEach(this.dataSource, (item) => {
ListItem() {
Text(item)
}
}, item => item.id)
}
特点:
OpenHarmony 中的回收 ≠ 手动 destroy
而是:
你不需要:
// ❌ 不需要
listItem.destroy()
list.removeChild()
ForEach(list, item => {
...
}, item => item.id) // ✅
ForEach(list, item => {
...
}, (item, index) => index) // ❌
// ❌ 不推荐
ListItem() {
ComponentWithBigObject()
}
this.dataList = newList
框架会自动 diff + 回收
常见误解:
| 现象 | 原因 |
|---|---|
| 滑动卡顿 | 用了 ForEach 而非 LazyForEach |
| 内存不降 | 外部仍引用 item 对象 |
| UI 错乱 | key 不稳定 |
| 状态残留 | 在 ListItem 外保存组件引用 |
OpenHarmony 列表组件是自动回收的,你只需要:用 LazyForEach / ForEach + 稳定 key + 不滥用状态。
如果你愿意,可以告诉我:
我可以给你一个最优回收方案示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。