西河刘卡车医 发表于 2025-1-22 23:22:13

鸿蒙NEXT开发【@ohos.arkui.StateManagement (状态管理)】 UI界面API

状态管理模块提供了应用程序的数据存储本领、持久化数据管理本领、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已经存在于中,返回对应的值;否则,通过获取默认值的构造器构造默认值,并返回。
元服务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中,将删除失败。
元服务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;
获取中的全部key。
元服务API:  从API version 12开始,该接口支持在元服务中使用。
系统本领:  SystemCapability.ArkUI.ArkUI.Full
参数:
无。
返回值:
类型描述Array全部AppStorageV2中的key。 说明
key在Array中的顺序是无序的,与key插入到AppStorageV2中的顺序无关。
示例:
// 假设AppStorageV2中存在两个key(key_as1、key_as2),返回赋值给keys
const keys: Array<string> = AppStorageV2.keys();
connect12+

static connect(
type: TypeConstructorWithArgs,
keyOrDefaultCreator?: string | StorageDefaultCreator,
defaultCreator?: StorageDefaultCreator
): T | undefined;
将键值对数据储存在应用磁盘中(持久化)。如果给定的key已经存在于中,返回对应的值;否则,通过获取默认值的构造器构造默认值,并返回。如果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中,将删除失败。
元服务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;
获取中的全部key。
元服务API:  从API version 12开始,该接口支持在元服务中使用。
系统本领:  SystemCapability.ArkUI.ArkUI.Full
参数:
无。
返回值:
类型描述Array全部PersistenceV2中的key。 说明
key在Array中的顺序是无序的,与key插入到PersistenceV2中的顺序无关。
示例:
// 假设PersistenceV2中存在两个key(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]的数据改变不会触发的主动持久化,如有须要,可调用该接口持久化对应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;
从状态管理框架包裹的署理对象中获取原始对象。详见。
元服务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企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 鸿蒙NEXT开发【@ohos.arkui.StateManagement (状态管理)】 UI界面API