当前位置: 首页 > article >正文

鸿蒙Harmony-应用状态-AppStorage详细介绍

鸿蒙Harmony-应用状态-AppStorage详细介绍

1.1 概述

AppStorage是在应用启动的时候会被创建的单例。它的目的是为了提供应用状态数据的中心存储,这些状态数据在应用级别都是可访问的。AppStorage将在应用运行过程保留其属性。属性通过唯一的键字符串值访问。

AppStorage可以和UI组件同步,且可以在应用业务逻辑中被访问。

AppStorage支持应用的主线程内多个UIAbility实例间的状态共享。

AppStorage中的属性可以被双向同步,数据可以是存在于本地或远程设备上,并具有不同的功能,比如数据持久化(详见PersistentStorage)。这些数据是通过业务逻辑中实现,与UI解耦,如果希望这些数据在UI中使用,需要用到@StorageProp和@StorageLink。

1.2 使用方法

AppStorage 是应用全局的UI状态存储,是和应用的进程绑定的,由UI框架在应用程序启动时创建,为应用程序UI状态属性提供中央存储。-注意它也是内存数据,不会写入磁盘,主要分为下面几个步骤

1. 2.1存入数据

    AppStorage.setOrCreate('userInfo',userInfo)
//userinfo是自己提前拿到的数据 可以自己模拟一下

1.2.2 读取数据

  1. 使用修饰符的方式拿数据
  @StorageLink('userInfo')
  userInfo: Record<string, string> = {}
  1. 使用API的方式拿取数据
 @State
userInfo:Record<string,string>= {}
  aboutToAppear(): void {
  this.userInfo = AppStorage.get('userInfo')!
   }

1.2.3 完整代码

import { router } from '@kit.ArkUI'

@Entry
@Component
struct TestAppStorage01 {
  login(){
    //存
    const userInfo:Record<string,string> = {
      'uname':'公孙离',
      'nickname':'小阿狸'
    }
    AppStorage.setOrCreate('userInfo',userInfo)
    router.pushUrl({
      url:'pages/10/TestAppStorage02'
    })

  }


  build() {
    Column({space:12}) {
      Row(){
        Text('账号:')
        TextInput()
          .layoutWeight(1)
      }.width('100%')
      .padding(20)
      Row(){
        Text('密码:')
        TextInput()
          .layoutWeight(1)
      }.width('100%')
      .padding(20)

      Row(){
        Button('登录')
          .onClick(()=>{
            this.login()
          })

          .layoutWeight(1)
      }.width('100%')
      .padding(20)
    }
    .height('100%')
    .width('100%')
  }
}
@Entry
@Component
struct TestAppStorage02 {
  @StorageLink('userInfo')
  userInfo: Record<string, string> = {}
  build() {
    Column() {
      Text('大神名称' + this.userInfo.uname)
      Text('江湖人称:' + this.userInfo.nickname)
    }
    .height('100%')
    .width('100%')
  }
}

1.2.4 效果展示

img

1.4.5 总结

AppStorage到底使用API还是修饰符

  1. 取出的结果是否有UI更新的需求 - UI修饰符
  2. 如果不需要进行UI展示,适合用API方法存取

http://www.kler.cn/a/547710.html

相关文章:

  • 蓝桥杯---排序数组(leetcode第912题)
  • 神经网络常见激活函数 12-Swish函数
  • 游戏引擎学习第104天
  • Nacos 详细介绍:微服务架构中的服务发现与配置管理利器
  • 用大模型学大模型04-机器学习建模过程
  • 基于单片机的常规肺活量SVC简单计算
  • DeepSeek官方推荐的AI集成系统
  • python股票分析系统部署操作过程及代码实现
  • Java 大视界 -- 全球数据治理格局下 Java 大数据的发展路径(89)
  • C++中常用的十大排序方法之3——插入排序
  • C++ 设计模式-组合模式
  • 【vue3】实现pdf在线预览的几种方式
  • 【实战篇】DeepSeek全自动视频工厂搭建指南
  • CAS单点登录(第7版)19.监控和统计
  • 华为OD最新机试真题-投骰子问题-Java-OD统一考试(E卷)
  • DeepSeek 通过 API 对接第三方客户端 告别“服务器繁忙”
  • Typescript 【详解】配置文件 tsconfig.json
  • 【第6章:强化学习基础与深度强化学习—6.4 强化学习在游戏、自动驾驶等领域的应用案例】
  • 无人机雨季应急救灾技术详解
  • 智慧城市V4系统小程序源码独立版全插件全开源