HarmonyOS-ArkUI V2装饰器: @Computed装饰器:计算属性
引
@Computed是用来装饰一个自己写的getter方法的装饰器,它可以让您像用平常的状态变量那样去用这个getter方法。那么getter方法里怎么获取的值,必然涉及到您写的逻辑。这个逻辑可以是很复杂的一种计算方式,经过一系列复杂方式计算完您吐出相应的结果即可。
为了便于理解,我们先从既有的所学的这些装饰器,来看看,当我们有个组件的界面依赖于比较复杂的状态变量计算时,会怎么写,您稍微看一下,估计就能察觉出来那些隐性的限制。
示例代码:
Button("XXXXX").backgroundColor(isRight? Color.Green : Color.Brown)
}
我们看出,其实backgroundColor等一些函数中其实是接收一个计算结果的,因为这是表达式哈,所以从语言上也是接受这种写法的。
但是如果有一个场景使得我们这个值非常复杂呢?那么您会怎么计算,用表达式也没有办法很好的来阐述这个问题。此时我们就要用@Computed装饰器来解决这种问题了。平常使用场景中其实缺少不了这种情况的。出现的挺频繁的。
我们先看一下它是怎么用的,用代码浅浅的体会下,它是怎么来解决我们上述提到的尴尬逻辑的。
@Entry
@ComponentV2
struct ComputedTest {@Local firstName: string = 'Li'@Local lastName: string = 'Hua'age: number = 20@Computedget getFullName(): string{console.log("-------------computed---------------")return this.lastName + ' ' + this.firstName}build() {Column(){Column(){Text(this.lastName + ' ' + this.firstName)Divider()Text(this.getFullName) //这块的入参就可以是一个Computed修饰的get函数。就像用状态变量一样用这个函数Divider()Button('changed lastName').onClick(() => {this.lastName += 'a'; //状态变量的变化,可以重新触发Computed的计算})}}}
}
概述
@Computed装饰器是用来装饰getter方法的。getter方法中涉及到相关状态变量的计算。当相关的状态变量发生变化时会自动触发Computed修饰的函数重新计算。对于比较复杂的计算,Computed会有性能收益。
语法:
// 1 必须是get方法。 2 可以返回