检测WordPress网站的安全性,淘宝美工做倒计时图片网站,在哪里做网站效果好,六安新闻 最新消息文章大纲 引言一、组件内状态装饰器State1、初始化2、使用规则3、变量的传递/访问规则说明4、支持的观察变化的场景5、State 变量的值初始化和更新机制6、State支持联合类型实例 引言
前一篇文章OpenHarmony 入门——ArkUI 自定义组件之间的状态装饰器小结#xff08;一… 文章大纲 引言一、组件内状态装饰器State1、初始化2、使用规则3、变量的传递/访问规则说明4、支持的观察变化的场景5、State 变量的值初始化和更新机制6、State支持联合类型实例 引言
前一篇文章OpenHarmony 入门——ArkUI 自定义组件之间的状态装饰器小结一简单复述了下这一篇就好好学习下装饰器的语法和用法。
一、组件内状态装饰器State
State装饰的变量即状态变量一旦变量拥有了状态属性就可以触发其直接绑定UI组件的刷新。当状态改变时UI会发生对应的渲染改变。**State是最基础的使变量拥有状态属性的装饰器它也是大部分状态变量的数据源。**换言之任一组件内部自己去通过数据驱动自身UI更新的只需要把常规变量加上State修饰即可。
1、初始化
State装饰的变量与声明式范式中的其他被装饰变量一样是私有的且只能从组件内部访问在声明时必须指定其类型和本地初始化初始化也可选择使用命名参数机制从父组件完成初始化。State装饰的变量生命周期与其所属自定义组件的生命周期相同。
2、使用规则 3、变量的传递/访问规则说明 4、支持的观察变化的场景
并非状态变量的所有更改都会引起UI的刷新只有可以被框架观察到的修改才会引起UI刷新。以下的修改可被观察到以及观察到变化后触发ArkUI框架刷新UI。
数据类型为boolean、string、number被修饰时可以观察到数值的变化。数据类型为class或者Object时可以观察到自身的赋值的变化及其属性赋值的变化即Object.keys(observedObject)返回的所有属性。 class ClassA {public value: string;constructor(value: string) {this.value value;}}class Model {public value: string;public name: ClassA;constructor(value: string, a: ClassA) {this.value value;this.name a;}}// State装饰的类型是Model
State title: Model new Model(Hello, new ClassA(World));
// class类型赋值可被观察到
this.title new Model(Hi, new ClassA(ArkUI));
// class属性的赋值 可被观察到
this.title.value Hi;// XXXXXX嵌套的属性赋值观察不到XXXXXXX
this.title.name.value ArkUI;数据类型为array时可以观察到数组本身的赋值和添加、删除、更新数组的变化
class Model {public value: number;constructor(value: number) {this.value value;}
}
// 数组类型
State title: Model[] [new Model(11), new Model(1)];
// 数组赋值
this.title [new Model(2)];
// 数组项赋值
this.title[0] new Model(2);
// 数组项更改
this.title.pop();
// 数组项更改
this.title.push(new Model(12));
// XXXXXXXXX嵌套的属性赋值观察不到
this.title[0].value 6; 当装饰的变量是Map时可以观察到Map整体的赋值同时可通过调用Map的接口set, clear, delete 更新Map的值。详见装饰Map类型变量。 当装饰的变量是Set时可以观察到Set整体的赋值同时可通过调用Set的接口add, clear, delete 更新Set的值。详见装饰Set类型变量。 当装饰的对象是Date时可以观察到Date整体的赋值同时可通过调用Date的接口setFullYear, setMonth, setDate, setHours, setMinutes, setSeconds, setMilliseconds, setTime, setUTCFullYear, setUTCMonth, setUTCDate, setUTCHours, setUTCMinutes, setUTCSeconds, setUTCMilliseconds 更新Date的属性。
5、State 变量的值初始化和更新机制
当状态变量被改变时查询依赖该状态变量的组件执行依赖该状态变量的组件的更新方法组件更新渲染和该状态变量不相关的组件或者UI描述不会发生重新渲染从而实现页面渲染的按需更新。
6、State支持联合类型实例
State支持联合类型和undefined和null在下面的示例中count类型为number | undefined点击Button改变count的属性或者类型视图会随之刷新。
Entry
Component
struct EntryComponent {build() {Column() {MyComponent()}}
}Component
struct MyComponent {State count: number | undefined 0;build() {Column() {Text(count(${this.count}))Button(change).onClick(() {this.count undefined;})}}
}
更多例子请参见后续文章。