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
- 可以选择实现将网络转换完可观察数据的中间函数,@ObservedV2以及@Trace强依赖new操作符实现能力。
- 可以考虑makeObserved接口,直接将数据转为可观察数据。
在HarmonyOS鸿蒙Next中,@ObservedV2和@Trace确实需要创建对象才能实现双向绑定。对于网络请求返回的对象,通常需要将其解析为具体的类实例,然后使用new
关键字创建对象。这样,这些对象才能被@ObservedV2和@Trace注解标记,从而实现双向绑定。
在HarmonyOS Next中,@ObservedV2和@Trace确实需要对象实例才能实现双向绑定。对于网络请求返回的JSON数据,建议使用以下处理方式:
- 不需要手动逐个new对象,可以通过以下方式处理:
- 定义一个符合JSON结构的类并使用@ObservedV2装饰
- 使用JSON.parse()或第三方库直接将JSON转换为对象实例
- 推荐做法:
[@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);
- 对于数组数据:
const users = jsonData.map(item => Object.assign(new User(), item));
这种方式既保持了类型安全,又满足了装饰器的要求,比手动new每个属性更高效。