HarmonyOS 鸿蒙Next嵌套数组元素的UI刷新方案

HarmonyOS 鸿蒙Next嵌套数组元素的UI刷新方案

嵌套数组元素的UI刷新方案 

2 回复

Demo: ArrayPage.ets

@Entry

@Component

struct ArrayPage {

  @State info: DataBean = new DataBean(1, "qq", [

    new DataBeanItem(11, 'qq11')

  ]);

  @State infos: DataBean[] = [];

  @Builder

  itemHead(databean: DataBean) {

    Text(`id:${databean.id}  name:${databean.name}`)

  }

  build() {

    Row() {

      Column() {

        List() {

          ListItemGroup({ header: this.itemHead(this.info) }) {

            ForEach(this.info.items, (item: DataBeanItem) => {

              ListItem() {

                Text(`childinfo: ${item.childName}`)

              }

            })

          }

        }

        Button('添加二层数据1').onClick(() => {

          this.info.items = this.info.items.concat([new DataBeanItem(12, 'qq12')])

        })

        Button('添加二层数据2').onClick(() => {

          this.info.items.push(new DataBeanItem(12, 'qq12'))

        })

        List() {

          ForEach(this.infos, (info: DataBean) => {

            ListItemGroup({ header: this.itemHead(info) }) {

              RecordItem({ info: info })

            }

          })

        }

        Button('添加一层数据1').onClick(() => {

          this.infos = [

            new DataBean(1, 'ww', []),

            new DataBean(2, 'rr', [new DataBeanItem(21, 'rr21')])

          ]

        })

        Button('添加一层数据2').onClick(() => {

          this.infos.push(new DataBean(3, 'ww', []), new DataBean(4, 'rr', [new DataBeanItem(41, 'rr21')]))

        })

      }

      .width('100%')

    }

    .height('100%')

  }

}

子组件:

@Component

export struct RecordItem {

  @ObjectLink info: DataBean;

  build() {

    Column() {

      ForEach(this.info.items, (item: DataBeanItem) => {

        ListItem() {

          Text(`childinfo: ${item.childName}`)

        }

      })

      Button('添加二层数据1').onClick(() => {

        this.info.items = this.info.items.concat([new DataBeanItem(12, 'qq12')])

      })

      Button('添加二层数据2').onClick(() => {

        this.info.items.push(new DataBeanItem(12, 'qq12'))

      })

    }

  }

}

使用ObjectLink时需要标注的对象

@Observed

export class DataBean {

  id: number = 0;

  name: string = '';

  items: DataBeanItem[] = [];

  constructor(id: number, name: string, items: DataBeanItem[]) {

    this.id = id;

    this.name = name;

    this.items = items;

  }

}

@Observed

export class ArrayDataBeanItem extends Array<DataBeanItem>{

}

@Observed

export class DataBeanItem {

  childId: number = 0;

  childName: string = '';

  constructor(childId: number, childName: string) {

    this.childId = childId;

    this.childName = childName;

  }

}

更多关于HarmonyOS 鸿蒙Next嵌套数组元素的UI刷新方案的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,针对Next嵌套数组元素的UI刷新,可以采用以下方案:

  1. 数据绑定机制:利用鸿蒙系统提供的数据绑定机制,将嵌套数组的数据与UI组件进行绑定。当数组中的元素发生变化时,系统能够自动感知并刷新对应的UI组件。

  2. 局部刷新:在嵌套数组元素发生变化时,通过调用UI组件的局部刷新方法,只刷新变化的部分,而不是整个页面。这可以提高UI更新的效率,减少不必要的资源消耗。

  3. 观察者模式:为嵌套数组实现一个观察者模式,当数组元素发生变化时,通知相关的UI组件进行刷新。这种方式需要手动编写一些代码来维护观察者和被观察者的关系。

  4. 使用自定义组件:如果嵌套数组的结构比较复杂,可以将其封装成一个自定义组件。在自定义组件内部处理数据的更新和UI的刷新,外部只需要关心组件的接口和状态。

  5. 利用动画和过渡效果:在刷新UI时,可以添加一些动画和过渡效果,使页面切换更加流畅,提升用户体验。

请注意,以上方案需要根据具体的应用场景和嵌套数组的结构进行调整和优化。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部