HarmonyOS 鸿蒙Next中LazyForEach数据加载性能优化,进行key的设置,解决二级分类数据错乱

HarmonyOS 鸿蒙Next中LazyForEach数据加载性能优化,进行key的设置,解决二级分类数据错乱 一、需求:

参考页面如下点击一级分类模块,二级分类列表Grid实现如下效果:

图片

问题:LazyForEach数据加载性能优化,进行key的设置,解决二级分类数据错乱

二、实现

  1. 加载列表代码仅供参考
Row() {
    List(
        scroller: this.scroller
    ) {
        LazyForEach(
            this.topCategories,
            (item: HomeCategoryModel, index: number) => {
                ListItem() {
                    this.tabBuilder(index, item)
                }
                .backgroundColor(
                    this.currentSelectedClassify !== index ? '#FFFFFF' : '#F6F6F6'
                )
            },
            (item: HomeCategoryModel, index: number) => JSON.stringify(item) + index
        )
    }
    .height('100%')
    .width('27.8%')
    .scrollBar(BarState.Off)
    .margin({
        top: 10,
        bottom: this.bottomSafeHeight
    })
    // 商品
    this.generatorProductsArea()
}
.justifyContent(FlexAlign.SpaceBetween)
.alignItems(VerticalAlign.Top)
.backgroundColor('#F6F6F6')
.height('100%')
.margin({
    bottom: this.bottomSafeHeight + 55
})
.expandSafeArea()
  1. 重点来了
LazyForEach(
    this.topCategories,
    (item: HomeCategoryModel, index: number) => {
        {
            ListItem() {
                this.tabBuilder(index, item)
            },
            backgroundColor(
                this.currentSelectedClassify !== index ? '#FFFFFF' : '#F6F6F6'
            )
        },
        (item: HomeCategoryModel, index: number) => JSON.stringify(item) + index
    )
)

重要的地方格外注意:

2.0 既是性能优化点,又是易出错点;

2.1 设置key值,唯一,避免二级分了数据的渲染错乱,具体知识点,大家可以百度查询,容易查到,印象深刻

2.3 数据源的变量声明,还是提一下:

// 左侧一级分类接口数据
@State topCategories: LazyDataSource<HomeCategoryModel> = new LazyDataSource()

Api都变了,还是要注意数据的变化api


更多关于HarmonyOS 鸿蒙Next中LazyForEach数据加载性能优化,进行key的设置,解决二级分类数据错乱的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在鸿蒙Next中,使用LazyForEach加载二级分类数据时,通过合理设置key可解决数据错乱问题。key应唯一标识数据项,建议使用分类ID或复合键(如父ID+子ID)。ArkTS示例:

LazyForEach(
  this.dataArray,
  (item: SubCategory) => `${item.parentId}_${item.id}`,
  (item: SubCategory) => {
    // 组件构建
  }
)

确保key值稳定,避免使用数组索引。当数据源变化时,Diff算法依赖key值正确匹配新旧数据节点。

更多关于HarmonyOS 鸿蒙Next中LazyForEach数据加载性能优化,进行key的设置,解决二级分类数据错乱的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中优化LazyForEach性能并解决二级分类数据错乱问题,关键在于正确设置key值。以下是具体解决方案:

  1. key值优化方案:
  • 当前使用JSON.stringify(item) + index作为key是可行的,但性能较差
  • 推荐使用item中的唯一标识字段(如id)作为key,例如:
(item: HomeCategoryModel) => item.id.toString()
  1. 数据源声明优化:
@State topCategories: LazyDataSource<HomeCategoryModel> = new LazyDataSource()
  1. 二级分类数据绑定: 确保二级分类Grid也使用LazyForEach并设置唯一key,建议采用复合key:
(subItem: SubCategoryModel) => `${item.id}_${subItem.id}`
  1. 性能优化技巧:
  • 避免在key生成函数中进行复杂计算
  • 对于静态数据,考虑使用ForEach替代LazyForEach
  • 确保数据模型的equals方法正确实现

这种方案既解决了数据错乱问题,又提升了渲染性能。

回到顶部