状态管理模块提供了应用程序的数据存储本领、持久化数据管理本领、UIAbility数据存储本领和应用程序需要的环境状态、工具。
说明
本模块首批接口从API version 12开始支持。
本文中T和S的寄义如下:
类型描述TClass,number,boolean,string和这些类型的数组形式。Snumber,boolean,string。 导入模块
- import { AppStorageV2,PersistenceV2,UIUtils} from '@kit.ArkUI';
复制代码 connect12+
static connect(
type: TypeConstructorWithArgs,
keyOrDefaultCreator?: string | StorageDefaultCreator,
defaultCreator?: StorageDefaultCreator
): T | undefined;
将键值对数据储存在应用内存中。如果给定的key已经存在于[AppStorageV2]中,返回对应的值;否则,通过获取默认值的构造器构造默认值,并返回。
元服务API: 从API version 12开始,该接口支持在元服务中使用。
系统本领: SystemCapability.ArkUI.ArkUI.Full
参数:
参数名类型必填参数描述typeTypeConstructorWithArgs是指定的类型,若未指定key,则使用type的name作为key。keyOrDefaultCreaterstringStorageDefaultCreator否defaultCreatorStorageDefaultCreator否获取默认值的构造器。 说明
1、若未指定key,使用第二个参数作为默认构造器;否则使用第三个参数作为默认构造器;
2、确保数据已经存储在AppStorageV2中,可省略默认构造器,获取存储的数据;否则必须指定默认构造器,不指定将导致应用异常;
3、同一个key,connect差别类型的数据会导致应用异常,应用需要确保类型匹配;
4、key建议使用有意义的值,长度不超过255,使用非法字符或空字符的行为是未定义的。
返回值:
类型描述T创建或获取AppStorageV2数据乐成时,返回数据;否则返回undefined。 示例:
- import { AppStorageV2 } from '@kit.ArkUI';
- @ObservedV2
- class SampleClass {
- @Trace p: number = 0;
- }
- // 将key为SampleClass、value为new SampleClass()对象的键值对存储到内存中,并赋值给as1
- const as1: SampleClass | undefined = AppStorageV2.connect(SampleClass, () => new SampleClass());
- // 将key为key_as2、value为new SampleClass()对象的键值对存储到内存中,并赋值给as2
- const as2: SampleClass = AppStorageV2.connect(SampleClass, 'key_as2', () => new SampleClass())!;
- // key为SampleClass已经在AppStorageV2中,将key为SampleClass的值返回给as3
- const as3: SampleClass = AppStorageV2.connect(SampleClass) as SampleClass;
复制代码 remove12+
static remove(keyOrType: string | TypeConstructorWithArgs): void;
将指定的键值对数据从[AppStorageV2]里面删除。如果指定的键值不存在于AppStorageV2中,将删除失败。
元服务API: 从API version 12开始,该接口支持在元服务中使用。
系统本领: SystemCapability.ArkUI.ArkUI.Full
参数:
参数名类型必填参数描述keyOrTypestringTypeConstructorWithArgs是 说明
删除AppStorageV2中不存在的key会报警告。
示例:
- // 假设AppStorageV2中存在key为key_as2的键,从AppStorageV2中删除该键值对数据
- AppStorageV2.remove('key_as2');
- // 假设AppStorageV2中存在key为SampleClass的键,从AppStorageV2中删除该键值对数据
- AppStorageV2.remove(SampleClass);
- // 假设AppStorageV2中不存在key为key_as1的键,报警告
- AppStorageV2.remove('key_as1');
复制代码 keys12+
static keys(): Array;
获取[AppStorageV2]中的全部key。
元服务API: 从API version 12开始,该接口支持在元服务中使用。
系统本领: SystemCapability.ArkUI.ArkUI.Full
参数:
无。
返回值:
类型描述Array全部AppStorageV2中的key。 说明
key在Array中的顺序是无序的,与key插入到AppStorageV2中的顺序无关。
示例:
- // 假设AppStorageV2中存在两个key(key_as1、key_as2),返回[key_as1、key_as2]赋值给keys
- const keys: Array<string> = AppStorageV2.keys();
复制代码 connect12+
static connect(
type: TypeConstructorWithArgs,
keyOrDefaultCreator?: string | StorageDefaultCreator,
defaultCreator?: StorageDefaultCreator
): T | undefined;
将键值对数据储存在应用磁盘中(持久化)。如果给定的key已经存在于[PersistenceV2]中,返回对应的值;否则,通过获取默认值的构造器构造默认值,并返回。如果connect的是[@ObservedV2]对象,该对象的[@Trace]属性的变革,会触发整个关联对象的主动持久化;非@Trace属性的变革则不会,如有须要,可调用PersistenceV2.save接口手动持久化。
元服务API: 从API version 12开始,该接口支持在元服务中使用。
系统本领: SystemCapability.ArkUI.ArkUI.Full
参数:
参数名类型必填参数描述typeTypeConstructorWithArgs是指定的类型,若未指定key,则使用type的name作为key。keyOrDefaultCreaterstringStorageDefaultCreator否defaultCreatorStorageDefaultCreator否获取默认值的构造器。 说明
1、若未指定key,使用第二个参数作为默认构造器;否则使用第三个参数作为默认构造器(第二个参数非法也使用第三个参数作为默认构造器);
2、确保数据已经存储在PersistenceV2中,可省略默认构造器,获取存储的数据;否则必须指定默认构造器,不指定将导致应用异常;
3、同一个key,connect差别类型的数据会导致应用异常,应用需要确保类型匹配;
4、key建议使用有意义的值,可由字母、数字、下划线组成,长度不超过255,使用非法字符或空字符的行为是未定义的。
返回值:
类型描述T创建或获取AppStorageV2数据乐成时,返回数据;否则返回undefined。 示例:
- import { PersistenceV2, Type } from '@kit.ArkUI';
- @ObservedV2
- class SampleClass {
- @Trace p1: number = 0;
- p2: number = 1;
- }
- @ObservedV2
- class FatherSampleClass {
- @Trace f: SampleClass = new SampleClass();
- }
- // 将key为SampleClass、value为new SampleClass()对象的键值对持久化,并赋值给as1
- const as1: FatherSampleClass | undefined = PersistenceV2.connect(FatherSampleClass, () => new FatherSampleClass());
- // 将key为key_as2、value为new SampleClass()对象的键值对持久化,并赋值给as2
- const as2: FatherSampleClass = PersistenceV2.connect(FatherSampleClass, 'key_as2', () => new FatherSampleClass())!;
- // key为SampleClass已经在PersistenceV2中,将key为SampleClass的值返回给as3
- const as3: FatherSampleClass = PersistenceV2.connect(FatherSampleClass) as FatherSampleClass;
- @Entry
- @Component
- struct SampleComp {
- v: FatherSampleClass = as2;
- build() {
- Column() {
- Text(`${this.v.f.p1}`)
- .onClick(() => {
- // 自动持久化
- this.v.f.p1++;
- })
- Text(`${this.v.f.p2}`)
- .onClick(() => {
- // 不能自动持久化,需要调用PersistenceV2.save
- this.v.f.p2++;
- })
- }
- }
- }
复制代码 remove12+
static remove(keyOrType: string | TypeConstructorWithArgs): void;
将指定的键值对数据从[PersistenceV2]里面删除。如果指定的键值不存在于PersistenceV2中,将删除失败。
元服务API: 从API version 12开始,该接口支持在元服务中使用。
系统本领: SystemCapability.ArkUI.ArkUI.Full
参数:
参数名类型必填参数描述keyOrTypestringTypeConstructorWithArgs是 说明
删除PersistenceV2中不存在的key会报警告。
示例:
- // 假设PersistenceV2中存在key为key_as2的键,从PersistenceV2中删除该键值对数据
- PersistenceV2.remove('key_as2');
- // 假设PersistenceV2中存在key为SampleClass的键,从PersistenceV2中删除该键值对数据
- PersistenceV2.remove(SampleClass);
- // 假设PersistenceV2中不存在key为key_as1的键,报警告
- PersistenceV2.remove('key_as1');
复制代码 keys12+
static keys(): Array;
获取[PersistenceV2]中的全部key。
元服务API: 从API version 12开始,该接口支持在元服务中使用。
系统本领: SystemCapability.ArkUI.ArkUI.Full
参数:
无。
返回值:
类型描述Array全部PersistenceV2中的key。 说明
key在Array中的顺序是无序的,与key插入到PersistenceV2中的顺序无关。
示例:
- // 假设PersistenceV2中存在两个key(key_as1、key_as2),返回[key_as1、key_as2]赋值给keys
- const keys: Array<string> = PersistenceV2.keys();
复制代码 save12+
static save(keyOrType: string | TypeConstructorWithArgs): void;
将指定的键值对数据持久化一次。
元服务API: 从API version 12开始,该接口支持在元服务中使用。
系统本领: SystemCapability.ArkUI.ArkUI.Full
参数:
参数名类型必填参数描述keyOrTypestringTypeConstructorWithArgs是 说明
由于非[@Trace]的数据改变不会触发[PersistenceV2]的主动持久化,如有须要,可调用该接口持久化对应key的数据;
手动持久化当前内存中不处于connect状态的key是偶然义的。
示例:
- // 假设PersistenceV2中存在key为key_as2的键,持久化该键值对数据
- PersistenceV2.save('key_as2');
- // 假设PersistenceV2中存在key为SampleClass的键,持久化该键值对数据
- PersistenceV2.remove(SampleClass);
- // 假设PersistenceV2中不存在key为key_as1的键,无意义的操作
- PersistenceV2.remove('key_as1');
复制代码 UIUtils
UIUtils提供一些方法,用于处理状态管理相关的数据转换。
getTarget12+
static getTarget(source: T): T;
从状态管理框架包裹的署理对象中获取原始对象。详见[getTarget接口:获取状态管理框架署理前的原始对象]。
元服务API: 从API version 12开始,该接口支持在元服务中使用。
系统本领: SystemCapability.ArkUI.ArkUI.Full
参数:
参数名类型必填参数描述sourceT是数据源对象。 返回值:
类型描述T数据源对象去除状态管理框架所加署理后的原始对象。 示例:
- import { UIUtils } from '@kit.ArkUI';
- class NonObservedClass {
- name: string = "Tom";
- }
- let nonObservedClass: NonObservedClass = new NonObservedClass();
- @Entry
- @Component
- struct Index {
- @State someClass: NonObservedClass = nonObservedClass;
- build() {
- Column() {
- Text(`this.someClass === nonObservedClass: ${this.someClass === nonObservedClass}`) // false
- Text(`UIUtils.getTarget(this.someClass) === nonObservedClass: ${UIUtils.getTarget(this.someClass) ===
- nonObservedClass}`) // true
- }
- }
- }
复制代码 makeObserved12+
static makeObserved(source: T): T;
将普通不可观察数据变为可观察数据。
元服务API: 从API version 12开始,该接口支持在元服务中使用。
系统本领: SystemCapability.ArkUI.ArkUI.Full
参数:
参数名类型必填参数描述sourceT是数据源对象。支持非@Observed和@ObserveV2修饰的class,JSON.parse返回的Object和@Sendable修饰的class。支持Array、Map、Set和Date。支持collection.Array, collection.Set和collection.Map。 返回值:
类型描述T可观察的数据。 示例:
- import { UIUtils } from '@kit.ArkUI';
- class NonObservedClass {
- name: string = 'Tom';
- }
- @Entry
- @ComponentV2
- struct Index {
- observedClass: NonObservedClass = UIUtils.makeObserved(new NonObservedClass());
- nonObservedClass: NonObservedClass = new NonObservedClass();
- build() {
- Column() {
- Text(`observedClass: ${this.observedClass.name}`)
- .onClick(() => {
- this.observedClass.name = 'Jane'; // 刷新
- })
- Text(`observedClass: ${this.nonObservedClass.name}`)
- .onClick(() => {
- this.nonObservedClass.name = 'Jane'; // 不刷新
- })
- }
- }
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |