LocalStorage:
LocalStorage是页面级UI状态存储,通过@Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。支持UIAbility实例内多个页面间状态共享。
// 存储数据
localStorage.setItem('key', 'value');
// 获取数据
const value = localStorage.getItem('key');
// 删除数据
localStorage.removeItem('key');
LocalsStorage根据@Component装饰的组件的同步类型不同,提供了两个装饰器:
@LocalStorageProp:
@LocalStorageProp装饰的变量与LocalStorage中给定属性建立单向同步关系。
@LocalStorageLink:
@LocalStorageLink装饰的变量与LocalStorage中给定属性建立双向同步关系。
AppStorage:
AppStorage是应用全局的UI状态存储。是喝应用的进程绑定的,由UI框架在应用程序启动时创建,为应用程序UI状态属性提供中央存储。
和AppStroage不同的是,LocalStorage是页面级的,通常应用页面内的数据共享。而Appstorage是应用的全局状态共享,还相当于整个应用的"中枢",持久化数据PeresistentStorage和环境变量Environment都是通过AppStorage中转,才可以和UI交互。
// 存储数据
appStorage.set('key', 'value');
// 获取数据
appStorage.get('key')
.then(value => {
console.log(value);
});
// 删除数据
appStorage.delete('key');
AppStorage使用场景和相关的装饰器:@StorageProp和@StorageLink。
@StorageProp:
使用@StorageProp(key)/@StorageLink(key)装饰组件内的变量,key标识了AppStorage的属性。AppStorage不一定存在key对应的属性,因此@StorageProp(key)/@StorageLink(key)装饰的变量进行本地初始化是必要的。
@StorageProp(key)是和AppStorage中key对应的属性建立单向数据同步,允许本地改变,但是对于@StorageProp,本地的修改永远不会同步回AppStorage中,相反,如果AppStorage给定key的属性发生改变,改变会被同步给@StorageProp,并覆盖掉本地的修改。
@StorageLink:
@StorageLink(key)是和AppStorage中key对应的属性建立双向数据同步:
-
本地修改发生,该修改会被写回AppStorage中;
-
AppStorage中的修改发生后,该修改会被同步到所有绑定AppStorage对应key的属性上,包括单向(@StorageProp和通过Prop创建的单向绑定变量)、双向(@StorageLink和通过Link创建的双向绑定变量)变量和其他实例(比如PersistentStorage)。
PersistentStorage:
PersistentStorage:持久化存储UI状态。
// 初始化数据库
const db = await persistentStorage.getDatabase('myDatabase');
// 插入数据
await db.insert('tableName', { key: 'value' });
// 查询数据
const result = await db.query('tableName', { key: 'value' });
// 删除数据
await db.delete('tableName', { key: 'value' });
作用是持久化存储选定的 AppStorage 属性。
- PersistentStorage的持久化变量最好是小于 2kb 的数据,不要大量的数据持久化。因为PersistentStorage写入磁盘的操作是同步的,大量的数据本地化读写会同步在UI线程中执行,影响UI渲染性能。
- PersistentStorage和UI实例相关联,持久化操作需要在UI实例初始化成功后,才能使用。而且一个 属性 只能初始化一次。
Environment:
应用程序运行的设备的环境参数,环境参数会同步到AppStorage中,可以和AppStorage搭配使用。
// 获取设备信息
const deviceInfo = environment.getDeviceInfo();
// 获取系统设置
const systemSettings = environment.getSystemSettings();
用户首选项:
其实就是个 xml 本地文件,<string>你好</string>,value如果string类型,可以存 16MB 的数据,最多存 1w 条数据。
// 存储用户首选项
userPreferences.set('theme', 'dark');
// 获取用户首选项
const theme = userPreferences.get('theme');
// 删除用户首选项
userPreferences.remove('theme');
持久化方案--数据库(类似表格):
需要定义表格的标题,表格的每一项数据的类型,有一套专门的 API 对数据进行增删查改。单条数据有2M的限制,总条数理论上没限制。
总结:
在鸿蒙操作系统中,有多种方式可以管理应用的状态和数据存储。选择合适的方法取决于具体的应用场景和需求:
LocalStorage:适用于简单的键值对存储。
AppStorage:适用于需要持久化存储的小量数据。
PersistentStorage:适用于需要长期保存大量数据的场景。
Environment:用于访问系统环境变量和配置。
用户首选项:用于存储用户的个性化设置和偏好。
持久化方案:适用于需要存储大量数据或复杂数据结构的场景,如文件系统和 SQLite 数据库。