HarmonyOS ComposeListItem使用switch监听onChange方法变化异常

ComposeListItem({
  contentItem: ({
    iconStyle: IconType.SYSTEM_ICON,
    icon: $r("app.media.set_push_setup"),
    primaryText: '个性化推送开关',
  }),
  operateItem: ({
    switch: {
      isCheck: this.data.isAcceptInfo == 0,
      onChange: (isCheck: boolean) => {
        if (this.hasData) {
          this.data.isAcceptInfo = isCheck ? 0 : 1
          this.requestPushSwitch(this.data.isAcceptInfo)
        }
      }
    },
  })
})

//数据请求返回
MineModel.getSetInfo((data) => {
  param.success?.()
  this.data = data
  this.viewState = ViewProgressState.SUCCESS
  this.hasData = true
}, (_code) => {
  param.error?.()
  this.viewState = ViewProgressState.SUCCESS
})

在数据请求结果回来后,如果this.data.isAcceptInfo从默认值1改为了0,那么这个时候会触发onChange方法,有什么方法可以避免这个数据请求结果回来的变化?

HarmonyOS
2024-12-25 13:36:26
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Excelsior_abit

代码中的isCheck与data中的isAcceptInfo绑定,无法直接禁止掉isAcceptInfo 变化引起的onChange事件。可以设置一个与isAcceptInfo不同的UI状态变量,用于控制switch组件的显示。这个UI状态变量只在用户与switch组件交互时更新,参考如下:

data: {
  isAcceptInfo: 1, // 从接口获取的值
  uiIsCheck: this.data.isAcceptInfo == 0 // 初始UI状态,但后续不直接由isAcceptInfo控制
},

// 当接口返回新值时更新isAcceptInfo,但不更新uiIsCheck
updateFromAPI(newIsAcceptInfo: number) {
  this.data.isAcceptInfo = newIsAcceptInfo;
  //这里不更新uiIsCheck
},
operateItem: ({
  switch: {
    isCheck: this.data.uiIsCheck, // 使用uiIsCheck而不是isAcceptInfo
    onChange: (isCheck: boolean) => {
      if (this.hasData) {
        this.data.uiIsCheck = isCheck; // 更新UI状态
        // 注意:这里不更新isAcceptInfo,因为那是从接口获取的
        this.requestPushSwitch(isCheck ? 0 : 1); // 使用isCheck而不是data.isAcceptInfo
      }
    }
  },
})
分享
微博
QQ
微信
回复
2024-12-25 16:24:51
相关问题
HarmonyOS Toggle组件onChange方法手动触发
280浏览 • 1回复 待解决
如何实现一个监听网络变化方法
793浏览 • 1回复 待解决
系统日历方法使用会抛异常
586浏览 • 0回复 待解决
HarmonyOS 网络变化监听失效
149浏览 • 1回复 待解决
HarmonyOS onMemoryLevel监听内存变化
47浏览 • 1回复 待解决
window.on监听方法使用
389浏览 • 1回复 待解决
HarmonyOS 音频设备变化监听
363浏览 • 1回复 待解决
HarmonyOS page如何监听数据变化
181浏览 • 1回复 待解决
HarmonyOS 装饰器数据变化监听
49浏览 • 1回复 待解决
HarmonyOS 如何监听系统主题变化
215浏览 • 1回复 待解决
HarmonyOS 如何监听某个变量是否变化
162浏览 • 1回复 待解决
HarmonyOS 如何监听组件自身尺寸变化
240浏览 • 1回复 待解决
如何监听系统应用异常
1911浏览 • 1回复 待解决
如何监听window大小的变化
641浏览 • 1回复 待解决
如何监听窗口大小的变化
2464浏览 • 1回复 待解决
HarmonyOS 如何监听到音频焦点的变化
233浏览 • 1回复 待解决