美文网首页
应用状态-AppStorage和PersistentStorag

应用状态-AppStorage和PersistentStorag

作者: 家乡的蝈蝈 | 来源:发表于2024-02-03 08:45 被阅读0次

1.1、AppStorage

LocalStorage是针对UIAbility的状态共享- 一个UIAbility有若个页面
一个应用可能有若干个UIAbility
  AppStorage 是应用内全局的UI状态存储,是和应用的进程绑定的,由UI框架在应用程序启动时创建,为应用程序UI状态属性提供中央存储。-注意它也是内存数据,不会写入磁盘
第一种用法-使用UI修饰符

  • 如果是初始化使用 AppStorage.SetOrCreate(key,value)
  • 单向 @StorageProp('user') 组件内可变
  • 双向 @StorageLink('user') 全局均可变

第二种用法 使用API方法

  • AppStorage.Get<ValueType>(key) 获取数据
  • AppStorage.Set<ValueType>(key,value) 覆盖数据
  • const link: SubscribedAbstractProperty<ValueType> = AppStorage.Link(key) 覆盖数据
    ○ link.set(value) 修改
    ○ link.get() 获取
页面1
import router from '@ohos.router'
@Entry
@Component
struct AppStorageCase {
  build() {
    Row() {
      Column() {
        Row() {
          Button('登录')
            .width('100%')
            .height(40)
            .onClick(() => {
              // T表示泛型,指定map中值的类型,SetOrCreate设置初始值
              AppStorage.SetOrCreate<string>("user_token","1")
              router.pushUrl({url:'pages/04/AppStorageCase2'})
            })
        }
        .padding({
          left:20,
          right:20
        })
      }
      .width('100%')
    }
    .height('100%')
  }
}

页面2
@Entry
@Component
struct AppStorageCase2 {
  @StorageProp("user_token") //单向, 取出user_token的值,赋值给token变量
  token:string = ""  // 通过变量的方式, 初始值""先执行,StorageProp后执行
  @StorageLink("user_token") // 双向,可以修改数据
  token2:string = ""
  aboutToAppear() {
    // 通过API的方式取值 T表示泛型,表示取出来的值为string类型
    // AppStorage.Get<string>("user_token")
    AlertDialog.show({message:AppStorage.Get<string>("user_token")})
  }
  build() {
    Row() {
      Column({space:20}) {
        Text(this.token)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
        Button('更新token')
          .onClick(() => {
            this.token2 = 'xxxx' // link可以修改数据
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

1.2、PersistentStorage

  LocalStorage、AppStorage均为内存状态,也就是应用退出便消失,所以如果我们想持久化的保留一些数据,应该使用PersistentStorage。
注意:
  UI和业务逻辑不直接访问 PersistentStorage 中的属性,所有属性访问都是对 AppStorage 的访问,AppStorage 中的更改会自动同步到PersistentStorage。
PersistentStorage 将选定的 AppStorage 属性保留在设备磁盘上。

  • 支持:number, string, boolean, enum 等简单类型;
  • 如果:要支持对象类型,可以转换成json字符串
  • 持久化变量最好是小于2kb的数据,如果开发者需要存储大量的数据,建议使用数据库api。
  • 用法:PersistentStorage.PersistProp('属性名', 值)
import router from '@ohos.router'
// 初始化磁盘,需要在使用前先初始化
// AppStorage进行Set时,检测到user_token被PersistentStorage修饰时,就会写入磁盘
PersistentStorage.PersistProp<string>("user_token","")
@Entry

  只要使用PersistentStorage初始化了数据,我们以后使用AppStorage就可以读取和设置,它会自动同步到我们的磁盘上。
  目前不支持复杂对象的持久化,如果你需要存储,你需要把它序列化成功字符串

相关文章

  • SwiftUI SceneStorage, AppStorage

    在SwiftUI中,当有轻量级数据需要持久化时,我们可以使用SceneStorage和AppStorage来做存储...

  • @AppStorage研究

    前言 在苹果生态的应用中,开发者或多或少都会使用到UserDefaults。我个人习惯将可被用户自定义的配置信息(...

  • SwiftUI 2.0 使用@AppStorage进行状态存储

    新的SceneStorage属性在具有多窗口支持的应用程序(通常基于iPadOS和macOS构建)的状态恢复中非常...

  • 009-应用数据持久化

    1.无状态应用与有状态应用 应用的有状态和无状态是根据应用是否有持久化保存数据的需求而言的,即持久化保存数据的应用...

  • 苹果公司联系邮箱大全

    AppReview@apple.com -应用在提交后(处于“审核中”),应用和应用内购的状态 -状态更新通知——...

  • Redux源码解读之 createStore

    介绍 createStore 用来创建应用的状态树,提供了状态树的访问和管理方式,用于维护整个应用的数据状态和页面...

  • K8S 无状态应用程序和示例

    无状态应用是不将数据或应用状态存储到集群或永久性存储空间的应用。相反,该应用将数据和应用状态保留在客户端,从而使无...

  • 苹果审核各部门联系方式

    AppReview@apple.com 应用在提交后(处于“审核中”),应用和应用内购的状态 状态更新通知——与开...

  • 适用于iOS的应用程序编程指南(七)

    在您的应用程序中启用状态保存和恢复 状态保存和恢复不是自动功能,应用程序必须选择使用它。应用程序通过在其应用程序委...

  • SwiftUI 2.0 使用@AppStorage

    可以用来快速的读写userdefault中存储的数据 废话不多说,先上代码,一会看效果:可以采用button点击直...

网友评论

      本文标题:应用状态-AppStorage和PersistentStorag

      本文链接:https://www.haomeiwen.com/subject/xqhzodtx.html