HarmonyOS List item 刷新问题

List() { 
  ForEach(this.dataList, (item: AddressListDataEntity,position:number) => { 
    ListItem() { 
      Column() { 
        Row() { 
          Text(item.name).fontColor($r("app.color.color_393939")).fontSize('18fp') 
          Text(item.mobilenumber) 
            .margin({ left: SizeUtil.lpx2px(20) }) 
            .fontColor($r("app.color.color_393939")) 
            .fontSize('14fp') 
 
        }.width('100%') 
        .justifyContent(FlexAlign.Start) 
 
        Text(item.province + "  " + item.city + "  " + item.area + "  " + item.street + "  " + item.detail) 
          .fontColor($r("app.color.999999")) 
          .fontSize('14fp') 
          .margin({ top: SizeUtil.lpx2px(30) }) 
 
        Column().width('100%') 
          .backgroundColor($r("app.color.EDEDED")) 
          .height('1vp') 
          .margin({ left: SizeUtil.lpx2px(30), right: SizeUtil.lpx2px(30), top: SizeUtil.lpx2px(30) }) 
 
        RelativeContainer() { 
 
 
          Row() { 
            Image(this.isChooseAddress ? item.isSelect ? $r("app.media.blue_checked") : $r("app.media.blue_unchecked") : (item.isDefault == "T") ? $r("app.media.blue_checked") : $r("app.media.blue_unchecked")) 
              .height(SizeUtil.lpx2px(30)) 
              .width(SizeUtil.lpx2px(30)) 
 
            Text(this.isChooseAddress ? item.isSelect ? "已选地址" : "选择地址" : (item.isDefault == "T") ? "默认地址" : "设为默认") 
              .fontColor($r("app.color.999999")) 
              .fontSize('14fp') 
              .margin({ left: SizeUtil.lpx2px(15) }) 
          }.alignRules({ 
            center: { anchor: "__container__", align: VerticalAlign.Center }, 
            left: { anchor: "__container__", align: HorizontalAlign.Start } 
          }) 
          .id("left_content") 
          .onClick(() => { 
            if (this.isChooseAddress) { 
              item.isSelect = !item.isSelect//>>>>>>在这里修改不刷新UI 
            } else { 
              let data: ToggleData = { 
                id: item.id, 
                isDefault: item.isDefault == "T" ? "F" : "T" 
              } 
              Api.getInstance().post<DataEntity>(RequestPath.API_ADDRESS_TOGGLE, data).then(data => { 
                this.getAddressList() 
              }) 
            } 
          }) 
 
          Text("修改") 
            .fontColor($r("app.color.999999")) 
            .fontSize('15fp') 
            .alignRules({ 
              center: { anchor: "__container__", align: VerticalAlign.Center }, 
              right: { anchor: "__container__", align: HorizontalAlign.End } 
            }) 
            .id("change") 
            .onClick(() => { 
              NavigatorUtil.toEditAddressPage(item) 
            }) 
 
        }.width('100%') 
        .height(SizeUtil.lpx2px(50)) 
        .margin({ top: SizeUtil.lpx2px(20) }) 
 
      }.width('100%') 
      .padding({ 
        top: SizeUtil.lpx2px(20), 
        bottom: SizeUtil.lpx2px(20), 
        left: SizeUtil.lpx2px(35), 
        right: SizeUtil.lpx2px(35) 
      }) 
    }.width('100%') 
    .border({ radius: 10 }) 
    .backgroundColor($r("app.color.color_FFFFFF")) 
 
  }, (item: AddressListDataEntity) => JSON.stringify(item)) 
}

代码如上 在list的 foreach 的item 中 修改对象的值 image UI没有刷新  怎样可以刷新UI?

HarmonyOS
2024-08-03 14:11:12
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
elucky

当数据源的数组项为对象数据类型,并且只修改某个数组项的属性值时,由于数据源为复杂数据类型,ArkUI框架无法监听到@State装饰器修饰的数据源数组项的属性变化,从而无法触发ForEach的重新渲染。

为实现ForEach重新渲染,需要结合@Observed和@ObjectLink装饰器使用

参考链接:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-observed-and-objectlink-0000001774279618#ZH-CN_TOPIC_0000001811157490__%E5%9C%A8observed%E8%A3%85%E9%A5%B0%E7%B1%BB%E7%9A%84%E6%9E%84%E9%80%A0%E5%87%BD%E6%95%B0%E4%B8%AD%E5%BB%B6%E6%97%B6%E6%9B%B4%E6%94%B9%E6%88%90%E5%91%98%E5%8F%98%E9%87%8F

当前@ObjectLink修饰的变量,确实只能通过new的方式实例化,不能直接将后端返回数据通过json反序列化方式装对象。

因为构造方法被特殊处理过,所有开发者需要接受后端数据后,需要new出对象,将后端返回数据遍历,塞到new的对象里面

分享
微博
QQ
微信
回复
2024-08-04 14:05:12
相关问题
HarmonyOS 页面刷新问题
213浏览 • 1回复 待解决
HarmonyOS 列表刷新问题
458浏览 • 1回复 待解决
HarmonyOS 页面跳转刷新问题
588浏览 • 1回复 待解决
HarmonyOS UI 未刷新问题
352浏览 • 0回复 待解决
NativeWindowFlushBuffer接口刷新问题
1895浏览 • 1回复 待解决
HarmonyOS 组件的下拉刷新问题
365浏览 • 1回复 待解决
HarmonyOS使用Refresh下拉刷新问题
663浏览 • 1回复 待解决
HarmonyOS 二维数组刷新问题
179浏览 • 1回复 待解决
HarmonyOS 状态变量不刷新问题
321浏览 • 1回复 待解决
HarmonyOS List组件动态刷新数据问题
656浏览 • 1回复 待解决
HarmonyOS Swiper里面的item高度自动刷新
339浏览 • 1回复 待解决
HarmonyOS listitem的交互效果处理
262浏览 • 1回复 待解决
HarmonyOS listitem如何保存状态
210浏览 • 2回复 待解决
HarmonyOS listitem支持托动效果吗?
172浏览 • 1回复 待解决
HarmonyOSList是如何加载item的?
35浏览 • 0回复 待解决