在 OpenHarmony(ArkUI) 中,“ListView 复用”这个说法需要稍微澄清一下,因为不同开发范式和组件形态不太一样:
List + ForEach + LazyForEach(自动复用)OpenHarmony 的 List 本身就支持节点复用,你不需要像 Android 那样手动写 ViewHolder。
List() {
ForEach(this.dataList, (item) => {
ListItem() {
Text(item)
}
})
}
✅ 系统会自动:
ListItemclass MyDataSource implements IDataSource {
data: string[] = []
totalCount(): number {
return this.data.length
}
getData(index: number): string {
return this.data[index]
}
registerDataChangeListener() {}
unregisterDataChangeListener() {}
}
List() {
LazyForEach(this.dataSource, (item) => {
ListItem() {
Text(item)
}
}, item => item)
}
✅ 特点:
| 项目 | 建议 |
|---|---|
| 列表项 | 用 ListItem |
| 数据驱动 | 不要手动操作 DOM |
| Key | LazyForEach 必须提供唯一 key |
| 复杂布局 | 拆组件,避免重渲染 |
如果是旧版 ListView 或类小程序写法:
<list>
<list-item for="{{list}}" key="id">
<text>{{$item.name}}</text>
</list-item>
</list>
✅ 框架会自动复用 list-item
❌ 手动 remove / add 节点
❌ 在 scroll 事件里频繁 setState
❌ 每个 item 都建新组件实例
这些都会 破坏复用机制
OpenHarmony 的 List 复用是“内置的”,你只要用
List + LazyForEach,不要手动管理节点即可。
如果你能告诉我:
我可以给你一份可直接跑的示例 Demo。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。