HarmonyOS 鸿蒙Next 数组中某一项的子项改变后,界面无法同步更新修改状态

HarmonyOS 鸿蒙Next 数组中某一项的子项改变后,界面无法同步更新修改状态

开发环境: DevEco Studio 3.1.0.200、Stage模型、API9、Ark TS语言。

通过ForEach将一个数组中的数据渲染为如下图所示,其中当点击下图中的加入时会修改加入状态,并根据加入状态显示不同的内容,预期结果为从图1变为图2。

cke_1991.png

图1

cke_10074.png

图2

在将数组元素中的加入状态设置为true或者false时,UI界面没有更新,即点击图1加入按钮后无任何反应。

数组定义代码:

@State private arr: any[] = [
    {
      title:'周末夜跑',
      eventTime:'2017-06-02 19:22:00',
      eventPosition:'山东省青岛市市北区沈阳路17号',
      eventJoin:false
    },
    {
      title:'环城骑行',
      eventTime:'2018-06-02 19:22:00',
      eventPosition:'山东省青岛市市南区沈阳路27号',
      eventJoin:false
    }]

组件代码:

@Builder hbEvent(item:any,index?:number){
      ......
      Row(){
        Image($r('app.media.ic_share'))
          .width('16%')
          .height('60%')
          .objectFit(ImageFit.Contain)
        Text('分享')
          .fontSize(20)
          .width('16%')
        Image($r('app.media.ic_comment'))
          .width('16%')
          .height('60%')
          .objectFit(ImageFit.Contain)
        Text('评论')
          .fontSize(20)
          .width('16%')
        Image(item.eventJoin?$r('app.media.join_on'):$r('app.media.join_off'))
          .width('16%')
          .height('60%')
          .objectFit(ImageFit.Contain)
        Text(item.eventJoin?'已加入':'加入')
          .fontSize(20)
          .width('17%')
          .onClick(e=>{
            item.eventJoin=!item.eventJoin
            console.log(item.eventJoin)
          })
      }
      .width('100%')
      .height('12%')
    }
    .width('100%')
    .height('50%')

更多关于HarmonyOS 鸿蒙Next 数组中某一项的子项改变后,界面无法同步更新修改状态的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

更多关于HarmonyOS 鸿蒙Next 数组中某一项的子项改变后,界面无法同步更新修改状态的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


插眼!

遇到同样的问题了,打印数据 实际data已经更新。

但是可能哪里没监听到,导致UI未更新

列表修改的话,需要绑定一个类,通过类来更改

export class Format {
    public id: number
    public name: String

    constructor(id: 0, name: '空白') {
        this.id = id;
        this.name = name;
    }
}
Format_list: Format[] = []

在HarmonyOS鸿蒙Next中,如果数组中某一项的子项改变后界面无法同步更新修改状态,这通常是由于数据绑定未正确实现或视图未触发重新渲染导致的。

HarmonyOS采用了类似于MVVM(Model-View-ViewModel)的架构模式,数据的变化应该能够自动触发视图的更新。若数组中子项变化未能反映到界面上,可能的原因包括:

  1. 数据绑定问题:确保你使用了正确的数据绑定方式,比如通过@State@Link等注解来标记需要监听变化的数据。

  2. 数组引用问题:如果你直接修改了数组元素的子属性而没有更新整个数组引用,可能会导致视图无法感知到变化。可以尝试通过创建一个新的数组实例来触发更新。

  3. 组件刷新机制:检查你的组件是否有条件渲染或懒加载逻辑,这些可能会阻止视图的即时更新。

  4. 异步数据处理:如果你在异步操作中修改了数据,确保在数据修改后调用了界面更新相关的API或方法。

检查以上方面,确保数据变化能够被正确监听并传递到视图层。如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部