马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
鸿蒙开发往期必看:
一分钟相识”纯血版!鸿蒙HarmonyOS Next应用开发!
“非常具体的” 鸿蒙HarmonyOS Next应用开发学习门路!(从零底子入门到夺目)
“一杯冰美式的时间” 相识鸿蒙HarmonyOS Next应用开发路径!
<hr> 为了增强状态管理框架对类对象中属性的观测本事,开发者可以使用@ObservedV2装饰器和@Trace装饰器装饰类以及类中的属性。
分析
@ObservedV2与@Trace装饰器从API version 12开始支持。
当前状态管理(V2试用版)仍在渐渐开发中,干系功能尚未成熟,发起开发者尝鲜试用。
概述
@ObservedV2装饰器与@Trace装饰器用于装饰类以及类中的属性,使得被装饰的类和属性具有深度观测的本事:
- @ObservedV2装饰器与@Trace装饰器须要共同使用,单独使用@ObservedV2装饰器或@Trace装饰器没有任何作用。
- 被@Trace装饰器装饰的属性property变革时,仅会关照property关联的组件举行革新。
- 在嵌套类中,嵌套类中的属性property被@Trace装饰且嵌套类被@ObservedV2装饰时,才具有触发UI革新的本事。
- 在继承类中,父类或子类中的属性property被@Trace装饰且该property地点类被@ObservedV2装饰时,才具有触发UI革新的本事。
- 未被@Trace装饰的属性用在UI中无法感知到变革,也无法触发UI革新。
- @ObservedV2的类实例现在不支持使用JSON.stringify举行序列化。
状态管理V1版本对嵌套类对象属性变革直接观测的范围性
现有状态管理V1版本无法实现对嵌套类对象属性变革的直接观测。
- @Observed
- class Father {
- son: Son;
- constructor(name: string, age: number) {
- this.son = new Son(name, age);
- }
- }
- @Observed
- class Son {
- name: string;
- age: number;
- constructor(name: string, age: number) {
- this.name = name;
- this.age = age;
- }
- }
- @Entry
- @Component
- struct Index {
- @State father: Father = new Father("John", 8);
- build() {
- Row() {
- Column() {
- Text(`name: ${this.father.son.name} age: ${this.father.son.age}`)
- .fontSize(50)
- .fontWeight(FontWeight.Bold)
- .onClick(() => {
- this.father.son.age++;
- })
- }
- .width('100%')
- }
- .height('100%')
- }
- }
复制代码 上述代码中,点击Text组件增长age的值时,不会触发UI革新。由于在现有的状态管理框架下,无法观测到嵌套类中属性age的值变革。V1版本的办理方案是使用@ObjectLink装饰器与自界说组件的方式实现观测。
- @Observed
- class Father {
- son: Son;
- constructor(name: string, age: number) {
- this.son = new Son(name, age);
- }
- }
- @Observed
- class Son {
- name: string;
- age: number;
- constructor(name: string, age: number) {
- this.name = name;
- this.age = age;
- }
- }
- @Component
- struct Child {
- @ObjectLink son: Son;
- build() {
- Row() {
- Column() {
- Text(`name: ${this.son.name} age: ${this.son.age}`)
- .fontSize(50)
- .fontWeight(FontWeight.Bold)
- .onClick(() => {
- this.son.age++;
- })
- }
- .width('100%')
- }
- .height('100%')
- }
- }
- @Entry
- @Component
- struct Index {
- @State father: Father = new Father("John", 8);
- build() {
- C
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |