HarmonyOS @Watch 如何检测数组内元素变化?

@State @Watch('dataChange') settingAllGroups: CommonListView.GroupModel[] = [
  {
    groupDataList: [
      {
        icon: $r("app.media.safe_setting_gesture"),
        title: "手势密码开关",
        style: CommonListView.CellStyle.SwitchButton,
        switchValue: this.gestureOpened
      }
    ]
  },
  {
    groupDataList: [
      {
        icon: $r("app.media.safe_setting_soft_certification_manager"),
        title: "软证书管理"
      }
    ]
  }
]

dataChange() {

  Logger.error('数据变化')
}

我这里新增groupDataList内数据,dataChange方法未发生调用,怎么可以监听groupDataList内的变化

阅读 637
1 个回答

目前还是通过数据驱动的方式刷新,没有提供手动刷新的方法。因为对象嵌套的比较深,使用@State的话是监听不到一些操作的,可以使用splice的方式,是变相实现了一个可以让@State感知到的变化,示例如下:

//原来是这一句代码:
this.settingAllGroups[0].groupDataList = updatedArray
//替换成下面的方式:
this.settingAllGroups.splice(0,1,{
  groupDataList :updatedArray
})

还可以看一下嵌套类对象属性变化,使用其他方式去定义:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-observed-and-objectlink-V5

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进