HarmonyOS鸿蒙Next中repeat官方示例代码运行后与文档截图不一致

HarmonyOS鸿蒙Next中repeat官方示例代码运行后与文档截图不一致 求解,拷贝了官方示例代码,运行后列表数据显示不出来,不知道是哪里的问题。用的mate60 v5.1.0

代码如下:

@Entry @ComponentV2 struct RepeatLazyLoadingLongData { // 假设数据源总长度较长,为1000。初始数组未提供数据。 @Local arr: Array<string> = []; scroller: Scroller = new Scroller(); build() { Column({ space: 5 }) { // 初始显示位置为index = 100,数据可通过懒加载自动获取。 List({ scroller: this.scroller, space: 5, initialIndex: 100 }) { Repeat(this.arr) .virtualScroll({ // 期望的数据源总长度为1000。 onTotalCount: () => { return 1000; }, // 实现数据懒加载。 onLazyLoading: (index: number) => { this.arr[index] = index.toString(); } }) .each((obj: RepeatItem<string>) => { ListItem() { Row({ space: 5 }) { Text(${obj.index}: Item_${obj.item}) } } .height(50) }) } .height(‘80%’) .border({ width: 1}) // 显示位置跳转至index = 500,数据可通过懒加载自动获取。 Button(‘ScrollToIndex 500’) .onClick(() => { this.scroller.scrollToIndex(500); }) } } }

文档位置如下:

cke_300.png


更多关于HarmonyOS鸿蒙Next中repeat官方示例代码运行后与文档截图不一致的实战教程也可以访问 https://www.itying.com/category-93-b0.html

7 回复

哈哈哈,文档里有这句话没注意到。“Repeat数据精准懒加载特性从API version 19开始支持”,

那就是系统版本有点低,发现问题了就好,加油,

  // 假设数据源总长度较长,为1000。初始数组未提供数据。

  @Local arr: Array<string> = [];

先为arr初始化数据,再看看效果。

初始化几条数据,也只会显示几条 。。。就很奇怪,

鸿蒙Next中repeat示例运行与文档不一致,可能是API版本差异或示例代码未及时更新。请核对HarmonyOS SDK版本是否与文档匹配,并检查示例代码是否针对当前API级别。文档截图可能基于特定预览版,公开版本可能存在界面渲染或行为调整。建议直接查阅最新官方示例仓库获取准确代码。

问题可能出在数据初始化和懒加载的时机上。根据你提供的代码,@Local arr: Array<string> = [] 初始化为空数组,而 onLazyLoading 回调仅在滚动到对应索引时触发,初始渲染时可能没有触发数据加载。

建议检查以下几点:

  1. 初始数据加载initialIndex 设置为 100,但初始数组为空,可能导致列表无法渲染。可以尝试在 aboutToAppear 生命周期中预先加载部分数据,例如前 20 条。
  2. 懒加载回调验证:在 onLazyLoading 中添加日志,确认回调是否被触发及索引是否正确。
  3. 数据绑定更新@Local 装饰器在数据变化时可能不会自动触发 UI 更新。可以尝试使用 @State 装饰器替代 @Local,确保数据变化时界面同步刷新。

修改示例:

@State arr: Array<string> = [];

aboutToAppear() {
  // 预先加载初始数据
  for (let i = 0; i < 20; i++) {
    this.arr[i] = i.toString();
  }
}

如果问题仍然存在,请检查开发环境版本是否与示例兼容,并确认 Repeat 组件在 HarmonyOS Next 中的具体使用限制。

回到顶部