赞
踩
@State状态数据具有以下特征:
1、支持多种类型:允许class、number、boolean、string强类型的按值和按引用类型。允许这些强类型构成的数组,即Array、Array、Array、Array。不允许object和any。
2、支持多实例:组件不同实例的内部状态数据独立。
3、内部私有:标记为@State的属性是私有变量,只能在组件内访问。
4、需要本地初始化:必须为所有@State变量分配初始值,将变量保持未初始化可能导致框架行为未定义。
5、 创建自定义组件时支持通过状态变量名设置初始值:在创建组件实例时,可以通过变量名显式指定@State状态属性的初始值。
@State向@Link传参时,用**$**引用@State父组件变量的值,如:
ComponentA({ highScore: $highScore })
@State向@Prop传参时,用**this.**引用@State父组件变量的值,如:
ComponentA({ highScore: this.highScore })
@Observed class ClassA {}
@ObjectLink a: ClassA
1、@Observed 用于类,@ObjectLink 用于变量。
2、@ObjectLink装饰的变量类型必须为类(class type)。
3、类要被@Observed装饰器所装饰。
4、@ObjectLink装饰的对象变量是不可变的,但可以修改对象里面变量的值。
5、@ObjectLink装饰的变量不可设置默认值。
6、@ObjectLink装饰的变量是私有变量,只能在组件内访问。
代码示例:
@Observed class ClassA { public name : string; public c: number; constructor(c: number, name: string = '') { this.name = name; this.c = c; } } class ClassB { public a: ClassA; constructor(a: ClassA) { this.a = a; } } @Component struct ViewA { label : string = "ep1"; @ObjectLink a : ClassA; build() { Column() { Text(`ViewA [${this.label}]: a.c=${this.a.c}`) .fontSize(20) Button(`+1`) .width(100) .margin(2) .onClick(() => { this.a.c += 1; }) Button(`reset`) .width(100) .margin(2) .onClick(() => { this.a = new ClassA(0); // 错误:ObjectLink装饰的变量a是不可变的 }) } } } @Entry @Component struct ViewB { @State b : ClassB = new ClassB(new ClassA(10)); build() { Flex({direction: FlexDirection.Column, alignItems: ItemAlign.Center}) { ViewA({label: "ViewA #1", a: this.b.a}) ViewA({label: "ViewA #2", a: this.b.a}) Button(`ViewB: this.b.a.c += 1` ) .width(320) .margin(4) .onClick(() => { this.b.a.c += 1; }) Button(`ViewB: this.b.a = new ClassA(0)`) .width(240) .margin(4) .onClick(() => { this.b.a = new ClassA(0); }) Button(`ViewB: this.b = new ClassB(ClassA(0))`) .width(240) .margin(4) .onClick(() => { this.b = new ClassB(new ClassA(0)); }) } } }
给大家分享一份我正在学习的《鸿蒙零基础入门学习指南》,希望能对那些想要学习鸿蒙,但是有没有方向的人提供一点帮助。 有需要的朋友,可以扫描下方二维码免费获取!!!
本文档适用于HarmonyOS应用开发的初学者。通过构建一个简单的具有页面跳转/返回功能的应用,快速了解工程目录的主要文件,熟悉HarmonyOS应用开发流程。
有需要完整文档的朋友,可以扫描下方二维码免费领取!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。