鸿蒙 管理应用拥有的状态有Localstorage、Appstorage、PersistentStorage、Environment、用户首选项、持久化方案。

devtools/2024/11/19 15:09:03/

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对应的属性建立双向数据同步:

  1. 本地修改发生,该修改会被写回AppStorage中;

  2. 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 数据库。


http://www.ppmy.cn/devtools/135227.html

相关文章

django从入门到实战(四)——模型与数据库

1. 模型的定义与数据迁移 1.1 模型的定义 在 Django 中&#xff0c;模型是一个 Python 类&#xff0c;用于定义数据库中的数据结构。每个模型类对应数据库中的一张表&#xff0c;类的属性对应表中的字段。 示例&#xff1a; from django.db import modelsclass Blog(models…

Vue.js 前端框架入门

简介 Vue.js 是一个构建用户界面的渐进式JavaScript框架。本文将带你了解Vue项目的目录结构&#xff0c;启动顺序&#xff0c;并逐步指导你安装必要的环境&#xff0c;以及如何开发一个基础的Vue项目。 需要的环境 Node.js&#xff1a;Vue.js 项目依赖于Node.js&#xff0c;…

网络基础(3)https和加密

http其它的报头 直接看图片&#xff1a; 上图中的第一个和第二个类型之前已经使用过了也就不多做说明了&#xff0c;第三个报头类型使用的很少了。第四个报头类型主要就使用在一些灰度更新的应用上&#xff0c;确定用户使用的软件的版本不让其访问该版本不能访问的功能。下一个…

Vue3 provide 和 inject的使用

在 Vue 中&#xff0c;provide 和 inject 是 Composition API 的一对功能&#xff0c;用于父子组件之间的依赖注入。它们的作用是让父组件可以向其所有子组件提供数据或方法&#xff0c;而不需要通过逐层传递 props。 1. provide provide 用于父组件中&#xff0c;提供数据或…

redis的击穿和雪崩

Redis 是一个高性能的键值存储数据库&#xff0c;广泛用于缓存、会话管理等场景。然而&#xff0c;Redis 在高并发场景下可能会遇到一些问题&#xff0c;比如“击穿”和“雪崩”。下面详细解释这两个概念&#xff1a; 击穿&#xff08;Hotspot&#xff09; 击穿是指某个热点数…

Springboot 整合 Java DL4J 打造金融风险评估系统

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s…

shell 接收长参数

以备份 mysql 脚本为例&#xff0c;如下 #!/bin/bash # 分隔符 str"-"# 定义分割线函数 FenGeLine() {## 获取屏幕宽度ScreenLen$(stty size |awk {print $2})## 标题宽度TitleLen$(echo -n $1 |wc -c)#echo $TitleLen## 左右分割线长度LineLen$(((${ScreenLen} - $…

海外媒体发稿与宣发:拓展全球影响力的关键-大舍传媒

海外媒体发稿与宣发&#xff1a;拓展全球影响力的关键 在当今全球化的商业环境中&#xff0c;企业和个人都渴望在国际舞台上崭露头角&#xff0c;吸引更广泛的关注和资源。海外媒体发稿与宣发已成为实现这一目标的关键策略。它不仅能够提升品牌知名度&#xff0c;还能塑造良好…