1e41f4b71Sopenharmony_ci# @ohos.arkui.StateManagement (状态管理)
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ci状态管理模块提供了应用程序的数据存储能力、持久化数据管理能力、UIAbility数据存储能力和应用程序需要的环境状态、工具。
4e41f4b71Sopenharmony_ci
5e41f4b71Sopenharmony_ci>**说明:**
6e41f4b71Sopenharmony_ci>
7e41f4b71Sopenharmony_ci>本模块首批接口从API version 12开始支持。
8e41f4b71Sopenharmony_ci
9e41f4b71Sopenharmony_ci
10e41f4b71Sopenharmony_ci本文中T和S的含义如下:
11e41f4b71Sopenharmony_ci
12e41f4b71Sopenharmony_ci
13e41f4b71Sopenharmony_ci| 类型   | 描述                                     |
14e41f4b71Sopenharmony_ci| ---- | -------------------------------------- |
15e41f4b71Sopenharmony_ci| T    | Class,number,boolean,string和这些类型的数组形式。 |
16e41f4b71Sopenharmony_ci| S    | number,boolean,string。                 |
17e41f4b71Sopenharmony_ci
18e41f4b71Sopenharmony_ci
19e41f4b71Sopenharmony_ci## 导入模块
20e41f4b71Sopenharmony_ci
21e41f4b71Sopenharmony_ci```ts
22e41f4b71Sopenharmony_ciimport { AppStorageV2,PersistenceV2,UIUtils} from '@kit.ArkUI';
23e41f4b71Sopenharmony_ci```
24e41f4b71Sopenharmony_ci
25e41f4b71Sopenharmony_ci## AppStorageV2
26e41f4b71Sopenharmony_ci
27e41f4b71Sopenharmony_ciAppStorageV2具体UI使用说明,详见[AppStorageV2(应用全局的UI状态存储)](../../quick-start/arkts-new-appstoragev2.md)
28e41f4b71Sopenharmony_ci
29e41f4b71Sopenharmony_ci### connect<sup>12+</sup>
30e41f4b71Sopenharmony_ci
31e41f4b71Sopenharmony_cistatic&nbsp;connect\<T extends object\>( </br >
32e41f4b71Sopenharmony_ci  &nbsp;&nbsp;&nbsp;&nbsp;type:&nbsp;TypeConstructorWithArgs\<T\>, </br >
33e41f4b71Sopenharmony_ci  &nbsp;&nbsp;&nbsp;&nbsp;keyOrDefaultCreator?:&nbsp;string&nbsp;|&nbsp;StorageDefaultCreator\<T\>, </br >
34e41f4b71Sopenharmony_ci  &nbsp;&nbsp;&nbsp;&nbsp;defaultCreator?:&nbsp;StorageDefaultCreator\<T\> </br >
35e41f4b71Sopenharmony_ci):&nbsp;T&nbsp;|&nbsp;undefined;
36e41f4b71Sopenharmony_ci
37e41f4b71Sopenharmony_ci将键值对数据储存在应用内存中。如果给定的key已经存在于[AppStorageV2](../../quick-start/arkts-new-appstoragev2.md)中,返回对应的值;否则,通过获取默认值的构造器构造默认值,并返回。
38e41f4b71Sopenharmony_ci
39e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
40e41f4b71Sopenharmony_ci
41e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
42e41f4b71Sopenharmony_ci
43e41f4b71Sopenharmony_ci**参数:**
44e41f4b71Sopenharmony_ci
45e41f4b71Sopenharmony_ci| 参数名   | 类型   | 必填 | 参数描述               |
46e41f4b71Sopenharmony_ci| -------- | ------ | ---- | ---------------------- |
47e41f4b71Sopenharmony_ci| type | TypeConstructorWithArgs\<T\> | 是   | 指定的类型,若未指定key,则使用type的name作为key。 |
48e41f4b71Sopenharmony_ci| keyOrDefaultCreater | string&nbsp;\|&nbsp;StorageDefaultCreator\<T\> | 否   | 指定的key,或者是获取默认值的构造器。 |
49e41f4b71Sopenharmony_ci| defaultCreator | StorageDefaultCreator\<T\> | 否   | 获取默认值的构造器。 |
50e41f4b71Sopenharmony_ci
51e41f4b71Sopenharmony_ci>**说明:**
52e41f4b71Sopenharmony_ci>
53e41f4b71Sopenharmony_ci>1、若未指定key,使用第二个参数作为默认构造器;否则使用第三个参数作为默认构造器;
54e41f4b71Sopenharmony_ci>
55e41f4b71Sopenharmony_ci>2、确保数据已经存储在AppStorageV2中,可省略默认构造器,获取存储的数据;否则必须指定默认构造器,不指定将导致应用异常;
56e41f4b71Sopenharmony_ci>
57e41f4b71Sopenharmony_ci>3、同一个key,connect不同类型的数据会导致应用异常,应用需要确保类型匹配;
58e41f4b71Sopenharmony_ci>
59e41f4b71Sopenharmony_ci>4、key建议使用有意义的值,长度不超过255,使用非法字符或空字符的行为是未定义的。
60e41f4b71Sopenharmony_ci
61e41f4b71Sopenharmony_ci**返回值:**
62e41f4b71Sopenharmony_ci
63e41f4b71Sopenharmony_ci| 类型                                   | 描述                                                         |
64e41f4b71Sopenharmony_ci| -------------------------------------- | ------------------------------------------------------------ |
65e41f4b71Sopenharmony_ci| T | 创建或获取AppStorageV2数据成功时,返回数据;否则返回undefined。 |
66e41f4b71Sopenharmony_ci
67e41f4b71Sopenharmony_ci**示例:**
68e41f4b71Sopenharmony_ci
69e41f4b71Sopenharmony_ci```ts
70e41f4b71Sopenharmony_ciimport { AppStorageV2 } from '@kit.ArkUI';
71e41f4b71Sopenharmony_ci
72e41f4b71Sopenharmony_ci@ObservedV2
73e41f4b71Sopenharmony_ciclass SampleClass {
74e41f4b71Sopenharmony_ci  @Trace p: number = 0;
75e41f4b71Sopenharmony_ci}
76e41f4b71Sopenharmony_ci
77e41f4b71Sopenharmony_ci// 将key为SampleClass、value为new SampleClass()对象的键值对存储到内存中,并赋值给as1
78e41f4b71Sopenharmony_ciconst as1: SampleClass | undefined = AppStorageV2.connect(SampleClass, () => new SampleClass());
79e41f4b71Sopenharmony_ci
80e41f4b71Sopenharmony_ci// 将key为key_as2、value为new SampleClass()对象的键值对存储到内存中,并赋值给as2
81e41f4b71Sopenharmony_ciconst as2: SampleClass = AppStorageV2.connect(SampleClass, 'key_as2', () => new SampleClass())!;
82e41f4b71Sopenharmony_ci
83e41f4b71Sopenharmony_ci// key为SampleClass已经在AppStorageV2中,将key为SampleClass的值返回给as3
84e41f4b71Sopenharmony_ciconst as3: SampleClass = AppStorageV2.connect(SampleClass) as SampleClass;
85e41f4b71Sopenharmony_ci```
86e41f4b71Sopenharmony_ci
87e41f4b71Sopenharmony_ci### remove<sup>12+</sup>
88e41f4b71Sopenharmony_ci
89e41f4b71Sopenharmony_cistatic&nbsp;remove\<T\>(keyOrType:&nbsp;string&nbsp;|&nbsp;TypeConstructorWithArgs\<T\>):&nbsp;void;
90e41f4b71Sopenharmony_ci
91e41f4b71Sopenharmony_ci将指定的键值对数据从[AppStorageV2](../../quick-start/arkts-new-appstoragev2.md)里面删除。如果指定的键值不存在于AppStorageV2中,将删除失败。
92e41f4b71Sopenharmony_ci
93e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
94e41f4b71Sopenharmony_ci
95e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
96e41f4b71Sopenharmony_ci
97e41f4b71Sopenharmony_ci**参数:**
98e41f4b71Sopenharmony_ci
99e41f4b71Sopenharmony_ci| 参数名   | 类型   | 必填 | 参数描述               |
100e41f4b71Sopenharmony_ci| -------- | ------ | ---- | ---------------------- |
101e41f4b71Sopenharmony_ci| keyOrType | string \| TypeConstructorWithArgs\<T\> | 是   | 需要删除的key;如果指定的是type类型,删除的key为type的name。 |
102e41f4b71Sopenharmony_ci
103e41f4b71Sopenharmony_ci>**说明:**
104e41f4b71Sopenharmony_ci>
105e41f4b71Sopenharmony_ci>删除AppStorageV2中不存在的key会报警告。
106e41f4b71Sopenharmony_ci
107e41f4b71Sopenharmony_ci
108e41f4b71Sopenharmony_ci**示例:**
109e41f4b71Sopenharmony_ci
110e41f4b71Sopenharmony_ci```ts
111e41f4b71Sopenharmony_ci// 假设AppStorageV2中存在key为key_as2的键,从AppStorageV2中删除该键值对数据
112e41f4b71Sopenharmony_ciAppStorageV2.remove('key_as2');
113e41f4b71Sopenharmony_ci
114e41f4b71Sopenharmony_ci// 假设AppStorageV2中存在key为SampleClass的键,从AppStorageV2中删除该键值对数据
115e41f4b71Sopenharmony_ciAppStorageV2.remove(SampleClass);
116e41f4b71Sopenharmony_ci
117e41f4b71Sopenharmony_ci// 假设AppStorageV2中不存在key为key_as1的键,报警告
118e41f4b71Sopenharmony_ciAppStorageV2.remove('key_as1');
119e41f4b71Sopenharmony_ci```
120e41f4b71Sopenharmony_ci
121e41f4b71Sopenharmony_ci### keys<sup>12+</sup>
122e41f4b71Sopenharmony_ci
123e41f4b71Sopenharmony_cistatic&nbsp;keys():&nbsp;Array\<string\>;
124e41f4b71Sopenharmony_ci
125e41f4b71Sopenharmony_ci获取[AppStorageV2](../../quick-start/arkts-new-appstoragev2.md)中的所有key。
126e41f4b71Sopenharmony_ci
127e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
128e41f4b71Sopenharmony_ci
129e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
130e41f4b71Sopenharmony_ci
131e41f4b71Sopenharmony_ci**参数:**
132e41f4b71Sopenharmony_ci
133e41f4b71Sopenharmony_ci无。
134e41f4b71Sopenharmony_ci
135e41f4b71Sopenharmony_ci**返回值:**
136e41f4b71Sopenharmony_ci
137e41f4b71Sopenharmony_ci| 类型                                   | 描述                                                         |
138e41f4b71Sopenharmony_ci| -------------------------------------- | ------------------------------------------------------------ |
139e41f4b71Sopenharmony_ci| Array\<string\> | 所有AppStorageV2中的key。 |
140e41f4b71Sopenharmony_ci
141e41f4b71Sopenharmony_ci>**说明:**
142e41f4b71Sopenharmony_ci>
143e41f4b71Sopenharmony_ci>key在Array中的顺序是无序的,与key插入到AppStorageV2中的顺序无关。
144e41f4b71Sopenharmony_ci
145e41f4b71Sopenharmony_ci**示例:**
146e41f4b71Sopenharmony_ci
147e41f4b71Sopenharmony_ci```ts
148e41f4b71Sopenharmony_ci// 假设AppStorageV2中存在两个key(key_as1、key_as2),返回[key_as1、key_as2]赋值给keys
149e41f4b71Sopenharmony_ciconst keys: Array<string> = AppStorageV2.keys();
150e41f4b71Sopenharmony_ci```
151e41f4b71Sopenharmony_ci
152e41f4b71Sopenharmony_ci
153e41f4b71Sopenharmony_ci
154e41f4b71Sopenharmony_ci## PersistenceV2
155e41f4b71Sopenharmony_ci
156e41f4b71Sopenharmony_ciPersistenceV2具体UI使用说明,详见[PersistenceV2(持久化存储UI状态)](../../quick-start/arkts-new-persistencev2.md)
157e41f4b71Sopenharmony_ci
158e41f4b71Sopenharmony_ci### connect<sup>12+</sup>
159e41f4b71Sopenharmony_ci
160e41f4b71Sopenharmony_cistatic&nbsp;connect\<T extends object\>( </br >
161e41f4b71Sopenharmony_ci  &nbsp;&nbsp;&nbsp;&nbsp;type:&nbsp;TypeConstructorWithArgs\<T\>, </br >
162e41f4b71Sopenharmony_ci  &nbsp;&nbsp;&nbsp;&nbsp;keyOrDefaultCreator?:&nbsp;string&nbsp;|&nbsp;StorageDefaultCreator\<T\>, </br >
163e41f4b71Sopenharmony_ci  &nbsp;&nbsp;&nbsp;&nbsp;defaultCreator?:&nbsp;StorageDefaultCreator\<T\> </br >
164e41f4b71Sopenharmony_ci):&nbsp;T&nbsp;|&nbsp;undefined;
165e41f4b71Sopenharmony_ci
166e41f4b71Sopenharmony_ci将键值对数据储存在应用磁盘中(持久化)。如果给定的key已经存在于[PersistenceV2](../../quick-start/arkts-new-persistencev2.md)中,返回对应的值;否则,通过获取默认值的构造器构造默认值,并返回。如果connect的是[\@ObservedV2](../../quick-start/arkts-new-observedV2-and-trace.md)对象,该对象的[\@Trace](../../quick-start/arkts-new-observedV2-and-trace.md)属性的变化,会触发**整个关联对象的自动持久化**;非\@Trace属性的变化则不会,如有必要,可调用PersistenceV2.save接口手动持久化。
167e41f4b71Sopenharmony_ci
168e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
169e41f4b71Sopenharmony_ci
170e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
171e41f4b71Sopenharmony_ci
172e41f4b71Sopenharmony_ci**参数:**
173e41f4b71Sopenharmony_ci
174e41f4b71Sopenharmony_ci| 参数名   | 类型   | 必填 | 参数描述               |
175e41f4b71Sopenharmony_ci| -------- | ------ | ---- | ---------------------- |
176e41f4b71Sopenharmony_ci| type | TypeConstructorWithArgs\<T\> | 是   | 指定的类型,若未指定key,则使用type的name作为key。 |
177e41f4b71Sopenharmony_ci| keyOrDefaultCreater | string&nbsp;\|&nbsp;StorageDefaultCreator\<T\> | 否   | 指定的key,或者是获取默认值的构造器。 |
178e41f4b71Sopenharmony_ci| defaultCreator | StorageDefaultCreator\<T\> | 否   | 获取默认值的构造器。 |
179e41f4b71Sopenharmony_ci
180e41f4b71Sopenharmony_ci>**说明:**
181e41f4b71Sopenharmony_ci>
182e41f4b71Sopenharmony_ci>1、若未指定key,使用第二个参数作为默认构造器;否则使用第三个参数作为默认构造器(第二个参数非法也使用第三个参数作为默认构造器);
183e41f4b71Sopenharmony_ci>
184e41f4b71Sopenharmony_ci>2、确保数据已经存储在PersistenceV2中,可省略默认构造器,获取存储的数据;否则必须指定默认构造器,不指定将导致应用异常;
185e41f4b71Sopenharmony_ci>
186e41f4b71Sopenharmony_ci>3、同一个key,connect不同类型的数据会导致应用异常,应用需要确保类型匹配;
187e41f4b71Sopenharmony_ci>
188e41f4b71Sopenharmony_ci>4、key建议使用有意义的值,可由字母、数字、下划线组成,长度不超过255,使用非法字符或空字符的行为是未定义的。
189e41f4b71Sopenharmony_ci
190e41f4b71Sopenharmony_ci**返回值:**
191e41f4b71Sopenharmony_ci
192e41f4b71Sopenharmony_ci| 类型                                   | 描述                                                         |
193e41f4b71Sopenharmony_ci| -------------------------------------- | ------------------------------------------------------------ |
194e41f4b71Sopenharmony_ci| T | 创建或获取AppStorageV2数据成功时,返回数据;否则返回undefined。 |
195e41f4b71Sopenharmony_ci
196e41f4b71Sopenharmony_ci**示例:**
197e41f4b71Sopenharmony_ci
198e41f4b71Sopenharmony_ci```ts
199e41f4b71Sopenharmony_ciimport { PersistenceV2, Type } from '@kit.ArkUI';
200e41f4b71Sopenharmony_ci
201e41f4b71Sopenharmony_ci@ObservedV2
202e41f4b71Sopenharmony_ciclass SampleClass {
203e41f4b71Sopenharmony_ci  @Trace p1: number = 0;
204e41f4b71Sopenharmony_ci  p2: number = 1;
205e41f4b71Sopenharmony_ci}
206e41f4b71Sopenharmony_ci
207e41f4b71Sopenharmony_ci@ObservedV2
208e41f4b71Sopenharmony_ciclass FatherSampleClass {
209e41f4b71Sopenharmony_ci  @Trace f: SampleClass = new SampleClass();
210e41f4b71Sopenharmony_ci}
211e41f4b71Sopenharmony_ci
212e41f4b71Sopenharmony_ci// 将key为SampleClass、value为new SampleClass()对象的键值对持久化,并赋值给as1
213e41f4b71Sopenharmony_ciconst as1: FatherSampleClass | undefined = PersistenceV2.connect(FatherSampleClass, () => new FatherSampleClass());
214e41f4b71Sopenharmony_ci
215e41f4b71Sopenharmony_ci// 将key为key_as2、value为new SampleClass()对象的键值对持久化,并赋值给as2
216e41f4b71Sopenharmony_ciconst as2: FatherSampleClass = PersistenceV2.connect(FatherSampleClass, 'key_as2', () => new FatherSampleClass())!;
217e41f4b71Sopenharmony_ci
218e41f4b71Sopenharmony_ci// key为SampleClass已经在PersistenceV2中,将key为SampleClass的值返回给as3
219e41f4b71Sopenharmony_ciconst as3: FatherSampleClass = PersistenceV2.connect(FatherSampleClass) as FatherSampleClass;
220e41f4b71Sopenharmony_ci
221e41f4b71Sopenharmony_ci@Entry
222e41f4b71Sopenharmony_ci@Component
223e41f4b71Sopenharmony_cistruct SampleComp {
224e41f4b71Sopenharmony_ci  v: FatherSampleClass = as2;
225e41f4b71Sopenharmony_ci
226e41f4b71Sopenharmony_ci  build() {
227e41f4b71Sopenharmony_ci    Column() {
228e41f4b71Sopenharmony_ci      Text(`${this.v.f.p1}`)
229e41f4b71Sopenharmony_ci        .onClick(() => {
230e41f4b71Sopenharmony_ci          // 自动持久化
231e41f4b71Sopenharmony_ci          this.v.f.p1++;
232e41f4b71Sopenharmony_ci        })
233e41f4b71Sopenharmony_ci      Text(`${this.v.f.p2}`)
234e41f4b71Sopenharmony_ci        .onClick(() => {
235e41f4b71Sopenharmony_ci          // 不能自动持久化,需要调用PersistenceV2.save
236e41f4b71Sopenharmony_ci          this.v.f.p2++;
237e41f4b71Sopenharmony_ci        })
238e41f4b71Sopenharmony_ci    }
239e41f4b71Sopenharmony_ci  }
240e41f4b71Sopenharmony_ci}
241e41f4b71Sopenharmony_ci```
242e41f4b71Sopenharmony_ci
243e41f4b71Sopenharmony_ci### remove<sup>12+</sup>
244e41f4b71Sopenharmony_ci
245e41f4b71Sopenharmony_cistatic&nbsp;remove\<T\>(keyOrType:&nbsp;string&nbsp;|&nbsp;TypeConstructorWithArgs\<T\>):&nbsp;void;
246e41f4b71Sopenharmony_ci
247e41f4b71Sopenharmony_ci将指定的键值对数据从[PersistenceV2](../../quick-start/arkts-new-persistencev2.md)里面删除。如果指定的键值不存在于PersistenceV2中,将删除失败。
248e41f4b71Sopenharmony_ci
249e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
250e41f4b71Sopenharmony_ci
251e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
252e41f4b71Sopenharmony_ci
253e41f4b71Sopenharmony_ci**参数:**
254e41f4b71Sopenharmony_ci
255e41f4b71Sopenharmony_ci| 参数名   | 类型   | 必填 | 参数描述               |
256e41f4b71Sopenharmony_ci| -------- | ------ | ---- | ---------------------- |
257e41f4b71Sopenharmony_ci| keyOrType | string \| TypeConstructorWithArgs\<T\> | 是   | 需要删除的key;如果指定的是type类型,删除的key为type的name。 |
258e41f4b71Sopenharmony_ci
259e41f4b71Sopenharmony_ci>**说明:**
260e41f4b71Sopenharmony_ci>
261e41f4b71Sopenharmony_ci>删除PersistenceV2中不存在的key会报警告。
262e41f4b71Sopenharmony_ci
263e41f4b71Sopenharmony_ci
264e41f4b71Sopenharmony_ci**示例:**
265e41f4b71Sopenharmony_ci
266e41f4b71Sopenharmony_ci```ts
267e41f4b71Sopenharmony_ci// 假设PersistenceV2中存在key为key_as2的键,从PersistenceV2中删除该键值对数据
268e41f4b71Sopenharmony_ciPersistenceV2.remove('key_as2');
269e41f4b71Sopenharmony_ci
270e41f4b71Sopenharmony_ci// 假设PersistenceV2中存在key为SampleClass的键,从PersistenceV2中删除该键值对数据
271e41f4b71Sopenharmony_ciPersistenceV2.remove(SampleClass);
272e41f4b71Sopenharmony_ci
273e41f4b71Sopenharmony_ci// 假设PersistenceV2中不存在key为key_as1的键,报警告
274e41f4b71Sopenharmony_ciPersistenceV2.remove('key_as1');
275e41f4b71Sopenharmony_ci```
276e41f4b71Sopenharmony_ci
277e41f4b71Sopenharmony_ci### keys<sup>12+</sup>
278e41f4b71Sopenharmony_ci
279e41f4b71Sopenharmony_cistatic&nbsp;keys():&nbsp;Array\<string\>;
280e41f4b71Sopenharmony_ci
281e41f4b71Sopenharmony_ci获取[PersistenceV2](../../quick-start/arkts-new-persistencev2.md)中的所有key。
282e41f4b71Sopenharmony_ci
283e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
284e41f4b71Sopenharmony_ci
285e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
286e41f4b71Sopenharmony_ci
287e41f4b71Sopenharmony_ci**参数:**
288e41f4b71Sopenharmony_ci
289e41f4b71Sopenharmony_ci无。
290e41f4b71Sopenharmony_ci
291e41f4b71Sopenharmony_ci**返回值:**
292e41f4b71Sopenharmony_ci
293e41f4b71Sopenharmony_ci| 类型                                   | 描述                                                         |
294e41f4b71Sopenharmony_ci| -------------------------------------- | ------------------------------------------------------------ |
295e41f4b71Sopenharmony_ci| Array\<string\> | 所有PersistenceV2中的key。 |
296e41f4b71Sopenharmony_ci
297e41f4b71Sopenharmony_ci>**说明:**
298e41f4b71Sopenharmony_ci>
299e41f4b71Sopenharmony_ci>key在Array中的顺序是无序的,与key插入到PersistenceV2中的顺序无关。
300e41f4b71Sopenharmony_ci
301e41f4b71Sopenharmony_ci**示例:**
302e41f4b71Sopenharmony_ci
303e41f4b71Sopenharmony_ci```ts
304e41f4b71Sopenharmony_ci// 假设PersistenceV2中存在两个key(key_as1、key_as2),返回[key_as1、key_as2]赋值给keys
305e41f4b71Sopenharmony_ciconst keys: Array<string> = PersistenceV2.keys();
306e41f4b71Sopenharmony_ci```
307e41f4b71Sopenharmony_ci
308e41f4b71Sopenharmony_ci### save<sup>12+</sup>
309e41f4b71Sopenharmony_ci
310e41f4b71Sopenharmony_cistatic&nbsp;save\<T\>(keyOrType:&nbsp;string&nbsp;|&nbsp;TypeConstructorWithArgs\<T\>):&nbsp;void;
311e41f4b71Sopenharmony_ci
312e41f4b71Sopenharmony_ci将指定的键值对数据持久化一次。
313e41f4b71Sopenharmony_ci
314e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
315e41f4b71Sopenharmony_ci
316e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
317e41f4b71Sopenharmony_ci
318e41f4b71Sopenharmony_ci**参数:**
319e41f4b71Sopenharmony_ci
320e41f4b71Sopenharmony_ci| 参数名   | 类型   | 必填 | 参数描述               |
321e41f4b71Sopenharmony_ci| -------- | ------ | ---- | ---------------------- |
322e41f4b71Sopenharmony_ci| keyOrType | string \| TypeConstructorWithArgs\<T\> | 是   | 需要持久化的key;如果指定的是type类型,持久化的key为type的name。 |
323e41f4b71Sopenharmony_ci
324e41f4b71Sopenharmony_ci>**说明:**
325e41f4b71Sopenharmony_ci>
326e41f4b71Sopenharmony_ci>由于非[\@Trace](../../quick-start/arkts-new-observedV2-and-trace.md)的数据改变不会触发[PersistenceV2](../../quick-start/arkts-new-persistencev2.md)的自动持久化,如有必要,可调用该接口持久化对应key的数据;
327e41f4b71Sopenharmony_ci>
328e41f4b71Sopenharmony_ci>手动持久化当前内存中不处于connect状态的key是无意义的。
329e41f4b71Sopenharmony_ci
330e41f4b71Sopenharmony_ci
331e41f4b71Sopenharmony_ci**示例:**
332e41f4b71Sopenharmony_ci
333e41f4b71Sopenharmony_ci```ts
334e41f4b71Sopenharmony_ci// 假设PersistenceV2中存在key为key_as2的键,持久化该键值对数据
335e41f4b71Sopenharmony_ciPersistenceV2.save('key_as2');
336e41f4b71Sopenharmony_ci
337e41f4b71Sopenharmony_ci// 假设PersistenceV2中存在key为SampleClass的键,持久化该键值对数据
338e41f4b71Sopenharmony_ciPersistenceV2.remove(SampleClass);
339e41f4b71Sopenharmony_ci
340e41f4b71Sopenharmony_ci// 假设PersistenceV2中不存在key为key_as1的键,无意义的操作
341e41f4b71Sopenharmony_ciPersistenceV2.remove('key_as1');
342e41f4b71Sopenharmony_ci```
343e41f4b71Sopenharmony_ci
344e41f4b71Sopenharmony_ci## UIUtils
345e41f4b71Sopenharmony_ci
346e41f4b71Sopenharmony_ciUIUtils提供一些方法,用于处理状态管理相关的数据转换。
347e41f4b71Sopenharmony_ci
348e41f4b71Sopenharmony_ci### getTarget<sup>12+</sup>
349e41f4b71Sopenharmony_ci
350e41f4b71Sopenharmony_cistatic getTarget\<T extends object\>(source: T): T;
351e41f4b71Sopenharmony_ci
352e41f4b71Sopenharmony_ci从状态管理框架包裹的代理对象中获取原始对象。详见[getTarget接口:获取状态管理框架代理前的原始对象](../../quick-start/arkts-new-getTarget.md)。
353e41f4b71Sopenharmony_ci
354e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
355e41f4b71Sopenharmony_ci
356e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
357e41f4b71Sopenharmony_ci
358e41f4b71Sopenharmony_ci**参数:**
359e41f4b71Sopenharmony_ci
360e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 参数描述     |
361e41f4b71Sopenharmony_ci| ------ | ---- | ---- | ------------ |
362e41f4b71Sopenharmony_ci| source | T    | 是   | 数据源对象。 |
363e41f4b71Sopenharmony_ci
364e41f4b71Sopenharmony_ci**返回值:**
365e41f4b71Sopenharmony_ci
366e41f4b71Sopenharmony_ci| 类型 | 描述                                             |
367e41f4b71Sopenharmony_ci| ---- | ------------------------------------------------ |
368e41f4b71Sopenharmony_ci| T    | 数据源对象去除状态管理框架所加代理后的原始对象。 |
369e41f4b71Sopenharmony_ci
370e41f4b71Sopenharmony_ci**示例:**
371e41f4b71Sopenharmony_ci
372e41f4b71Sopenharmony_ci```ts
373e41f4b71Sopenharmony_ciimport { UIUtils } from '@kit.ArkUI';
374e41f4b71Sopenharmony_ciclass NonObservedClass {
375e41f4b71Sopenharmony_ci  name: string = "Tom";
376e41f4b71Sopenharmony_ci}
377e41f4b71Sopenharmony_cilet nonObservedClass: NonObservedClass = new NonObservedClass();
378e41f4b71Sopenharmony_ci@Entry
379e41f4b71Sopenharmony_ci@Component
380e41f4b71Sopenharmony_cistruct Index {
381e41f4b71Sopenharmony_ci  @State someClass: NonObservedClass = nonObservedClass;
382e41f4b71Sopenharmony_ci  build() {
383e41f4b71Sopenharmony_ci    Column() {
384e41f4b71Sopenharmony_ci      Text(`this.someClass === nonObservedClass: ${this.someClass === nonObservedClass}`) // false
385e41f4b71Sopenharmony_ci      Text(`UIUtils.getTarget(this.someClass) === nonObservedClass: ${UIUtils.getTarget(this.someClass) ===
386e41f4b71Sopenharmony_ci        nonObservedClass}`) // true
387e41f4b71Sopenharmony_ci    }
388e41f4b71Sopenharmony_ci  }
389e41f4b71Sopenharmony_ci}
390e41f4b71Sopenharmony_ci```
391e41f4b71Sopenharmony_ci### makeObserved<sup>12+</sup>
392e41f4b71Sopenharmony_ci
393e41f4b71Sopenharmony_cistatic makeObserved\<T extends object\>(source: T): T;
394e41f4b71Sopenharmony_ci
395e41f4b71Sopenharmony_ci将普通不可观察数据变为可观察数据。详见[makeObserved接口:将非观察数据变为可观察数据](../../quick-start/arkts-new-makeObserved.md)。
396e41f4b71Sopenharmony_ci
397e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
398e41f4b71Sopenharmony_ci
399e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
400e41f4b71Sopenharmony_ci
401e41f4b71Sopenharmony_ci**参数:**
402e41f4b71Sopenharmony_ci
403e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 参数描述     |
404e41f4b71Sopenharmony_ci| ------ | ---- | ---- | ------------ |
405e41f4b71Sopenharmony_ci| source | T    | 是   | 数据源对象。支持非@Observed和@ObserveV2修饰的class,JSON.parse返回的Object和@Sendable修饰的class。</br>支持Array、Map、Set和Date。</br>支持collection.Array, collection.Setcollection.Map。</br>具体使用规则,详见[makeObserved接口:将非观察数据变为可观察数据](../../quick-start/arkts-new-makeObserved.md)。 |
406e41f4b71Sopenharmony_ci
407e41f4b71Sopenharmony_ci**返回值:**
408e41f4b71Sopenharmony_ci
409e41f4b71Sopenharmony_ci| 类型 | 描述                                             |
410e41f4b71Sopenharmony_ci| ---- | ------------------------------------------------ |
411e41f4b71Sopenharmony_ci| T    | 可观察的数据。 |
412e41f4b71Sopenharmony_ci
413e41f4b71Sopenharmony_ci**示例:**
414e41f4b71Sopenharmony_ci
415e41f4b71Sopenharmony_ci```ts
416e41f4b71Sopenharmony_ciimport { UIUtils } from '@kit.ArkUI';
417e41f4b71Sopenharmony_ciclass NonObservedClass {
418e41f4b71Sopenharmony_ci  name: string = 'Tom';
419e41f4b71Sopenharmony_ci}
420e41f4b71Sopenharmony_ci
421e41f4b71Sopenharmony_ci@Entry
422e41f4b71Sopenharmony_ci@ComponentV2
423e41f4b71Sopenharmony_cistruct Index {
424e41f4b71Sopenharmony_ci  observedClass: NonObservedClass = UIUtils.makeObserved(new NonObservedClass());
425e41f4b71Sopenharmony_ci  nonObservedClass: NonObservedClass = new NonObservedClass();
426e41f4b71Sopenharmony_ci  build() {
427e41f4b71Sopenharmony_ci    Column() {
428e41f4b71Sopenharmony_ci      Text(`observedClass: ${this.observedClass.name}`)
429e41f4b71Sopenharmony_ci        .onClick(() => {
430e41f4b71Sopenharmony_ci          this.observedClass.name = 'Jane'; // 刷新
431e41f4b71Sopenharmony_ci        })
432e41f4b71Sopenharmony_ci      Text(`observedClass: ${this.nonObservedClass.name}`)
433e41f4b71Sopenharmony_ci        .onClick(() => {
434e41f4b71Sopenharmony_ci          this.nonObservedClass.name = 'Jane'; // 不刷新
435e41f4b71Sopenharmony_ci        })
436e41f4b71Sopenharmony_ci    }
437e41f4b71Sopenharmony_ci  }
438e41f4b71Sopenharmony_ci}
439e41f4b71Sopenharmony_ci```