HarmonyOS 数据更新不了问题

当去修改了数组中的某个Model的 localSelected 状态时,子组件的页面不刷新

父组件

@State goalsLabels: Array<CsUserLabelBean> = new Array()
// 创建子组件
CsCoLabelTabContents({ labels: this.goalsLabels })

子组件代码:

@Component
export struct CsLabelItem {
  @ObjectLink item: CsUserLabelBean

  build() {
    Text(this.item.title)
      .margin({
        left: ds2vp(4),
        right: ds2vp(4),
        top: ds2vp(5.5),
        bottom: ds2vp(5.5)
      })
      .textAlign(TextAlign.Center)
      .fontSize(ds2vp(13.33))
      .fontColor(this.item.localSelected ? '#FFFFFF' : '#965E31')
      .backgroundColor(this.item.localSelected ? '#C78652' : '#FBF1E2')
      .borderRadius(ds2vp(12))
      .width(ds2vp(90))
      .height(ds2vp(24))
      .padding({ left: ds2vp(4), right: ds2vp(4) })
      .maxLines(1)
      .textOverflow({ overflow: TextOverflow.Ellipsis })
      .border({
        width: ds2vp(1),
        color: this.item.localSelected ? '#FBF1E2' : '#E9C47C',
        style: BorderStyle.Solid
      })
  }
}

@Component
export struct CsCoLabelTabContents {
  @Prop labels: Array<CsUserLabelBean>

  build() {
    Column() {
      Grid() {
        ForEach(this.labels, (item: CsUserLabelBean, index: number) => {
          GridItem() {
            CsLabelItem({ item: item })
          }
        })
      }
      .scrollBar(BarState.Off)
      .columnsTemplate('1fr 1fr 1fr 1fr 1fr 1fr')
      .width(ds2vp(611))
      .padding({ top: ds2vp(18) })
      .height('100%')
    }.width('100%')
    .height('100%')
    .alignItems(HorizontalAlign.Center)
    .backgroundColor('#FFF4E4')
  }

model 代码

@Observed
export class CsUserLabelBean {
  // 标签ID
  id: number = 0
  // 标题
  title: string | null = null
  // 类型
  category_id: number = 0
  // 是否选中
  localSelected: boolean = false
}
HarmonyOS
2025-01-09 15:18:28
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Excelsior_abit

因为@State只能观察到goalsLabels属性的变化观察不到次一级的属性变化所以未ui未更新,可以给goalsLabels重新赋值,如:

let tmpList:Array<CsUserLabelBean> = new Array()
this.goalsLabels.forEach(element => {
  element.localSelected = false
  console.log('test info ', element.localSelected);
  tmpList.push(element);
});
this.goalsLabels = tmpList;
或者也可以通过以下方式:
@Observed
export class CsUserLabelBeanArray{
  public changeFlag = false;
  public goalsLabels:Array<CsUserLabelBean> = [];
}

在初始化和更新时通过改变changeFlag 触发ui刷新

分享
微博
QQ
微信
回复
2025-01-09 17:48:22
相关问题
更新过后手机打不了电话
12171浏览 • 5回复 待解决
华为p40pro怎么更新不了鸿蒙
9636浏览 • 1回复 待解决
卡片数据更新问题求大佬解答
5704浏览 • 1回复 待解决
HarmonyOS 数据数据更新怎么监听?
584浏览 • 1回复 待解决
Java Player视频播放不了问题
9041浏览 • 2回复 待解决
HarmonyOS app更新问题
359浏览 • 1回复 待解决
HarmonyOS List组件数据更新错误
636浏览 • 0回复 待解决
HarmonyOS 更新数据后UI不刷新
359浏览 • 1回复 待解决
HarmonyOS 关于WrapperBuilder更新问题
282浏览 • 1回复 待解决
HarmonyOS 应用内更新问题
446浏览 • 1回复 待解决
HarmonyOS UI未在数据更新时刷新
298浏览 • 1回复 待解决
HarmonyOS Grid容器视图更新问题
786浏览 • 1回复 待解决
HarmonyOS 更新测试版本接口问题
434浏览 • 1回复 待解决
如何更新页面列表数据
7457浏览 • 1回复 待解决