HarmonyOS 接口请求数据后,@State声明的对象不会更新组件
接口请求回来的数据,在LiveModel中赋值但是并不会更新组件LiveModel代码如下:
export class LiveModel {
  private static liveModel: LiveModel
  public data: LiveInfoBean = new LiveInfoBean()
  static getInstance(): LiveModel {
    if (LiveModel.liveModel === undefined) {
      LiveModel.liveModel = new LiveModel()
    }
    return LiveModel.liveModel
  }
  getLiveDetail(liveId: string) {
    VideoAgent.getLiveInfo(liveId, (data: LiveInfoObject) => {
      this.data = data.LiveTelecastDetail
    }, (error: string) => {
    })
  }
}
component代码如下:
@Component
export struct LiveComponent {
  @State model: LiveModel = LiveModel.getInstance()
  @State data: LiveInfoBean = this.model.data
  @State liveUrl: string = this.model.getLiveUrl()
  aboutToAppear(): void {
    let params: CommonParams = this.param as CommonParams
    if (this.param) {
      this.liveId = params.value
      this.model.getLiveDetail(this.liveId)
    }
  }
  build() {
    NavDestination() {
      Image(this.data.img)
        .objectFit(ImageFit.Auto)
        .width("100%")
        .height(210)
        .id("img")
        .margin({
          top: this.realTopHeight
        })
    }
  }
}
LiveInfoBean代码如下:
@Observed
export class LiveInfoBean {
  public img: string = ""
}
网络请求数据解析代码如下:
export class ProjectResultHttpListener<T> implements IHttpListener {
  private onSuccessFunc: (t: T) => void;
  private onFailureFunc: (err: string) => void;
  constructor(onSuccessFunc: (t: T) => void, onFailureFunc: (err: string) => void) {
    this.onSuccessFunc = onSuccessFunc;
    this.onFailureFunc = onFailureFunc;
  }
  onSuccess(stringResult: string): void {
    try {
      let resultObj: ProjectResultBean<T> = JSON.parse(stringResult);
      if (resultObj.errno == 0 || resultObj.error == 0) {
        this.onSuccessFunc(resultObj.data as T);
      } else if ("string" == typeof resultObj.data) {
        this.onFailureFunc(resultObj.data as string);
      } else {
        this.onFailureFunc(resultObj.msg);
      }
    } catch (error) {
      this.onFailureFunc(`error:${error}`);
    }
  }
  onFailure(err: string) {
    this.onFailureFunc(err);
  }
}
        HarmonyOS
      
        赞
        
 收藏 0
 回答 1
 
        待解决
        
相关问题
 HarmonyOS 接口请求数据处理 
1047浏览  • 1回复 待解决
HarmonyOS Swiper能接口请求完成后更新数据吗,给个具体demo吗? 
1312浏览  • 1回复 待解决
网络请求数据后的处理 
1529浏览  • 1回复 待解决
HarmonyOS 接口请求网络数据返回后,如何通知页面UI数据刷新 
2383浏览  • 1回复 待解决
HarmonyOS axios接口请求 
1259浏览  • 1回复 待解决
HarmonyOS 接口请求处理 
1324浏览  • 1回复 待解决
HarmonyOS LazyForEach不会更新@State里的值 
1130浏览  • 1回复 待解决
HarmonyOS 有没有接口请求时loading组件 
951浏览  • 1回复 待解决
HarmonyOS 接口请求处理处理 
1111浏览  • 1回复 待解决
HarmonyOS  网络接口请求查看功能 
1145浏览  • 1回复 待解决
HarmonyOS 父组件的@state变量更新后子组件不生效 
1146浏览  • 1回复 待解决
鸿蒙JS开发 接口请求loading?? 
7714浏览  • 1回复 已解决
鸿蒙JS开发 接口请求loading? 
6834浏览  • 1回复 待解决
HarmonyOS 如何发起网络接口请求 
1029浏览  • 1回复 待解决
HarmonyOS 使用http请求,接口请求一直超时 
1381浏览  • 1回复 待解决
HarmonyOS 提出来的组件数据不会更新 
1311浏览  • 1回复 待解决
鸿蒙JS开发 蓠接口请求loading? 
4870浏览  • 1回复 待解决
HarmonyOS @State无法更新组件的文本 
809浏览  • 1回复 待解决
网络请求数据处理问题 
1788浏览  • 1回复 待解决
HarmonyOS  @State修饰@observed装饰的对象, 对象里的数组改变, 不会触发ui刷新 
1300浏览  • 1回复 待解决
关于http请求数据发送异常问题的咨询 
1492浏览  • 1回复 待解决
使用rcp请求数据,如何同步网页端的session登录状态? 
1222浏览  • 1回复 待解决
HarmonyOS如何设置网络请求后无数据、接口异常后的空数据界面? 
1110浏览  • 1回复 待解决
SSL peer certificate or SSH remote key was not OK,网络数据接口请求突然报错怎么回事? 
5954浏览  • 1回复 待解决
HarmonyOS  HTTP网络接口请求自定义header大小写问题 
1354浏览  • 1回复 待解决





















1、查看以下LiveTelecastDetail的路径是否正确,建议修改为:
2、在aboutToappear中赋值,这样可以再创建自定义组件的新实例后,在执行其build()函数之前获取到数据:
3、建议使用@ObservedV2装饰器和@Trace装饰器类属性变化观测,参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-new-observedv2-and-trace-V5