一、引言 在鸿蒙Next开发中,类属性的观测对于状态管理至关重要。本文将详细介绍@ObservedV2装饰器和@Trace装饰器的功能、使用方法、限制以及应用场景,帮助开发者更好地理解和运用这两个装饰器进行类属性变化观测,从而实现更高效的状态管理。 二、装饰器概述 (一)功能 @ObservedV2与@Trace装饰器配合使用,赋予类和属性深度观测能力,使被装饰的类和属性在变化时能触发相应UI组件刷新,增强状态管理框架对类对象属性的观测能力。 (二)版本支持 从API version 12开始支持@ObservedV2与@Trace装饰器。 (三)注意事项 当前状态管理(V2试用版)仍在开发中,功能尚未成熟,开发者可尝鲜试用。 三、装饰器说明 (一)@ObservedV2类装饰器 参数:无。 作用:装饰class,放在class定义前,用于创建类对象,使类具备被观测的能力。 (二)@trace成员变量装饰器 参数:无。 作用:装饰class中的成员属性,属性类型可为number、string、boolean、class、Array、Date、Map、Set等,使被装饰属性变化时可被观测。 四、观察变化机制 (一)触发UI刷新条件 使用@ObservedV2装饰的类中,被@Trace装饰的属性值变化时,会触发该属性绑定的UI组件刷新。 (二)不同场景下的观测能力 嵌套类场景 当嵌套类中的属性被@Trace装饰且嵌套类被@ObservedV2装饰时,该属性变化具有触发UI刷新的能力。 例如,在Pencil类(被@ObservedV2装饰)中,属性length(被@Trace装饰)变化时,关联的UI组件会刷新。但如果son变量(非状态变量)重新赋值,即使length属性变化,UI也不会刷新。 继承类场景 无论是在基类还是继承类中,被@Trace装饰的属性变化都可被观测并触发UI刷新。 如在GrandFather类(被@ObservedV2装饰)中,属性age(被@Trace装饰),在Son类或Cousin类实例中改变age值,UI会相应刷新。 静态属性场景 类中被@Trace装饰的静态属性变化时,也能触发UI刷新。 (三)对内置类型的观测 @Trace装饰内置类型(如Array、Date、Map、Set等)时,可观测各自API导致的变化,具体API如下: |类型|可观测变化的API| |—|—| |Array|push、pop、shift、unshift、splice、copyWithin、fill、reverse、sort| |Date|setFullYear, setMonth, setDate, setHours, setMinutes, setSeconds, setMilliseconds, setTime, setUTCFullYear, setUTCMonth, setUTCDate, setUTCHours, setUTCMinutes, setUTCSeconds, setUTCMilliseconds| |Map|set, clear, delete| |Set|add, clear,…