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

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

基本知识点

1、c++的输入加上ios::sync_with_stdio(false);  等价于 c的输入,读取速度会加快(但是在字符串的题里面和容易出现问题) 2、lower_bound()和upper_bound() iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。 iterator upper_bou

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

客户案例:安全海外中继助力知名家电企业化解海外通邮困境

1、客户背景 广东格兰仕集团有限公司(以下简称“格兰仕”),成立于1978年,是中国家电行业的领军企业之一。作为全球最大的微波炉生产基地,格兰仕拥有多项国际领先的家电制造技术,连续多年位列中国家电出口前列。格兰仕不仅注重业务的全球拓展,更重视业务流程的高效与顺畅,以确保在国际舞台上的竞争力。 2、需求痛点 随着格兰仕全球化战略的深入实施,其海外业务快速增长,电子邮件成为了关键的沟通工具。

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

bytes.split的用法和注意事项

当然,我很乐意详细介绍 bytes.Split 的用法和注意事项。这个函数是 Go 标准库中 bytes 包的一个重要组成部分,用于分割字节切片。 基本用法 bytes.Split 的函数签名如下: func Split(s, sep []byte) [][]byte s 是要分割的字节切片sep 是用作分隔符的字节切片返回值是一个二维字节切片,包含分割后的结果 基本使用示例: pa