HarmonyOS鸿蒙Next中@ObservedV2和@Trace必须需要创建对象才能有双向绑定,那网络请求回来的对象,是不是也要单独解析出来一个个new出对象来?

HarmonyOS鸿蒙Next中@ObservedV2@Trace必须需要创建对象才能有双向绑定,那网络请求回来的对象,是不是也要单独解析出来一个个new出对象来?

4 回复

可以使用三方库class-transformer,将普通js对象转成class实例。

import * as ClassTransformer from 'class-transformer'
import 'reflect-metadata'

const entity = ClassTransformer.plainToClass(DemoEntity, obj)

更多关于HarmonyOS鸿蒙Next中@ObservedV2和@Trace必须需要创建对象才能有双向绑定,那网络请求回来的对象,是不是也要单独解析出来一个个new出对象来?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


  1. 可以选择实现将网络转换完可观察数据的中间函数,@ObservedV2以及@Trace强依赖new操作符实现能力。
  2. 可以考虑makeObserved接口,直接将数据转为可观察数据。

在HarmonyOS鸿蒙Next中,@ObservedV2@Trace确实需要创建对象才能实现双向绑定。对于网络请求返回的对象,通常需要将其解析为具体的类实例,然后使用new关键字创建对象。这样,这些对象才能被@ObservedV2@Trace注解标记,从而实现双向绑定。

在HarmonyOS Next中,@ObservedV2@Trace确实需要对象实例才能实现双向绑定。对于网络请求返回的JSON数据,建议使用以下处理方式:

  1. 不需要手动逐个new对象,可以通过以下方式处理:
  • 定义一个符合JSON结构的类并使用@ObservedV2装饰
  • 使用JSON.parse()或第三方库直接将JSON转换为对象实例
  1. 推荐做法:
[@ObservedV2](/user/ObservedV2)
class User {
  [@Trace](/user/Trace) name: string = '';
  [@Trace](/user/Trace) age: number = 0;
}

// 网络请求后转换
const response = await fetch(...);
const jsonData = await response.json();
const user = Object.assign(new User(), jsonData);
  1. 对于数组数据:
const users = jsonData.map(item => Object.assign(new User(), item));

这种方式既保持了类型安全,又满足了装饰器的要求,比手动new每个属性更高效。

回到顶部