HarmonyOS-LocalStorage/AppStorage/PersistentStorage的基本用法(案例)

本文主要是介绍HarmonyOS-LocalStorage/AppStorage/PersistentStorage的基本用法(案例),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、LocalStorage

LocalStorage是ArkTS为构建页面级别状态变量提供存储的内存内“数据库”。

(1)特点

1.LocalStorage实例可以在 "页面(一个页面)内" 共享

2.LocalStorage中的所有属性都是可变

3.@LocalStorageProp:@LocalStorageProp装饰的变量和与LocalStorage中给定属性建立 单向同步关系。状态变量修改不同步更新。

@LocalStorageLink:@LocalStorageLink装饰的变量和在@Component中创建与LocalStorage中给定属性建立 双向同步关系。状态变量修改同步更新。

4.类型必须被指定,且必须和LocalStorage中对应属性相同。不支持any,不允许使用undefined和null。

(2)用法

1.创建新实例并使用给定对象初始化:

     let storage = new LocalStorage({ 'PropA': 47 });

2.注入实例:

    @Entry(storage)

3. @LocalStorageLink变量装饰器声明新变量storLink1与LocalStorage中的'PropA'属性建立双向绑定:

    @LocalStorageLink('PropA') storLink1: number = 1;

(3)案例

// 创建新实例并使用给定对象初始化
let storage = new LocalStorage({ 'PropA': 47 });@Entry(storage) // 使LocalStorage可从@Component组件访问---注入实例
@Component
struct LocalStoragePage {// @LocalStorageLink变量装饰器声明新变量storLink1与LocalStorage中的'PropA'属性建立双向绑定@LocalStorageLink('PropA') storLink1: number = 1;build() {Column() {Text('-------LocalStorage-------').fontColor(Color.Red).fontSize(24)Text(`storLink1: ${this.storLink1}`).fontSize(20).fontWeight(600).onClick(() => {this.storLink1++;})Button('修改').onClick(() => {storage.set('PropA', 100)})ComA()}.width('100%').padding(20).justifyContent(FlexAlign.Start).alignItems(HorizontalAlign.Start)}
}@Component
struct ComA {build() {Column() {Text(`ComA`)ComB()}.justifyContent(FlexAlign.Start).alignItems(HorizontalAlign.Start)}
}@Component
struct ComB {@LocalStorageLink('PropA') storLink2: number = 1; //双向@LocalStorageProp('PropA') storLink3: number = 1; //单向build() {Column() {Text(`ComB_link: ${this.storLink2}`).onClick(() => {this.storLink2 += 10})Text(`ComB_prop: ${this.storLink3}`).onClick(() => {this.storLink3 += 10})}}
}

二、AppStorage

(1)特点

1.AppStorage是应用级的全局状态共享

2.@StorageProp:单向同步:从AppStorage的对应属性到组件的状态变量。组件本地的修改是允许的,但是AppStorage中给定的属性一旦发生变化,将覆盖本地的修改。

   @StorageLink:双向同步:从AppStorage的对应属性到自定义组件,从自定义组件到AppStorage对应属性。

3.类型必须被指定,且必须和LocalStorage中对应属性相同。不支持any,不允许使用undefined和null。

(2)用法

1.创建新实例并使用给定对象初始化:

     AppStorage.SetOrCreate('PropA', 48);

2.注入实例:

    @Entry(storage)

3. @StorageLink变量装饰器声明新变量appLink1与AppStorage中的'PropA'属性建立双向绑定:

    @StorageLink('PropA') appLink1: number = 1;

(3)案例

import router from '@ohos.router';
// 全局
AppStorage.SetOrCreate('PropA', 48);@Entry(storage) // 使LocalStorage可从@Component组件访问---注入实例
@Component
struct LocalStoragePage {@StorageLink('PropA') appLink1: number = 1;build() {Column() {Text('-------appStorage-------').fontColor(Color.Red).fontSize(24)Text(`storLink1: ${this.appLink1}`).fontSize(20).fontWeight(600).onClick(() => {this.appLink1++;})Button('修改').onClick(() => {AppStorage.SetOrCreate('PropA', 100)})Button('跳转').onClick(() => {router.pushUrl({ url: 'pages/Index' })})}.width('100%').padding(20).justifyContent(FlexAlign.Start).alignItems(HorizontalAlign.Start)}
}

pages/Index页面:

//导入页面路由模块
import router from '@ohos.router';@Entry
@Component
struct Index {// 全局@StorageLink('PropA') propa: number = 1;build() {Column() {Text(`appStorage: ${this.propa}`).onClick(() => {this.propa++})Button('返回').onClick(()=>{router.back();}) }.width('100%')}
}

三、PersistentStorage

(1)特点

1.UI和业务逻辑不直接访问PersistentStorage中的属性,所有属性访问都是对AppStorage的访问,AppStorage中的更改会自动同步到PersistentStorage

2.PersistentStorage和AppStorage中的属性建立双向同步

3.限制条件:不支持嵌套对象(对象数组,对象的属性是对象等);不支持undefined 和 null 

4.PersistentStorage的持久化变量最好是小于2kb的数据

5.PersistentStorage只能在UI页面内使用,否则将无法持久化数据

(2)用法

1.初始化PersistentStorage属性,此时AppStorage中也生成一个Address属性

       PersistentStorage.PersistProp('Address', "");

2.在AppStorage获取对应属性

       AppStorage.Get('aProp');

或在组件内部定义:

       @StorageLink('Address') address: string = "";

(3)案例

PersistentStorage.PersistProp('aProp', 47);@Entry
@Component
struct Index {@State message: string = 'Hello World'@StorageLink('aProp') aProp: number = 48build() {Row() {Column() {Text(this.message)// 应用退出时会保存当前结果。重新启动后,会显示上一次的保存结果Text(`${this.aProp}`).onClick(() => {this.aProp += 1;})}}}
}

这篇关于HarmonyOS-LocalStorage/AppStorage/PersistentStorage的基本用法(案例)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/886075

相关文章

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文

解读GC日志中的各项指标用法

《解读GC日志中的各项指标用法》:本文主要介绍GC日志中的各项指标用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基础 GC 日志格式(以 G1 为例)1. Minor GC 日志2. Full GC 日志二、关键指标解析1. GC 类型与触发原因2. 堆