AtkTs之状态管理四

5 阅读2分钟

在上一篇内容中我们了解了 LocalStorage的基本用法和一些基本的内容, 我们在第一篇内容中还看到了另外一个管理应用拥有的状态AppStorage,我们这一篇就来对它进行了解。

首先我们先介绍一下AppStorage: AppStorage是应用全局的UI状态存储,是和应用的进程绑定的,由UI框架在应用程序启动时创建,为应用程序UI状态属性提供中央存储。和AppStorage不同的是,LocalStorage是页面级的,通常应用于页面内的数据共享。而AppStorage是应用级的全局状态共享,还相当于整个应用的“中枢”。AppStorage可以和UI组件同步,且可以在应用业务逻辑中被访问。AppStorage支持应用的主线程内多个UIAbility实例间的状态共享,AppStorage中的属性可以被双向同步,数据可以是存在于本地或远程设备上,并具有不同的功能

 

先介绍了一下AppStorage的概念,接下来我们来说一下它的用法:

初始化: AppStorage.setOrCreate(propName, newValue)

第一种:

使用API的方法, 例如:

AppStorage.get(propName, newValue) 获取数据

AppStorage.set(propName, newValue) 覆盖数据

第二种

使用UI的修饰符

@StorageProp("value") 单向传递参考Prop, 组件内可以改变

@StorageLink("value") 双向传递参考Link, 全局都可以改变

第一种方法的演示

[AppStorage1.mp4] live.csdn.net/v/468904

    **import** { router } **from** '@kit.ArkUI'  
  
@Entry  
@Component  
**struct** AppStoragePage {  
  
  @State name: string = "老李"  
  @State age: string = "30"  
  storage() {  
    **const** info: Record<string, string> = {  
      "name": "老李",  
      "age": "30"  
    }  
    AppStorage.setOrCreate<Record<string, string>>("IDInfo", info)  
  }  
  build() {  
    Column({ space: 12 }) {  
      Text("我是页面一")  
      Text(`姓名: ${**this**.name}`)  
      Text(`年龄: ${**this**.age}`)  
      Button("点击跳转")  
        .onClick(() => {  
          **this**.storage()  
          router.pushUrl({ url: "pages/AppStor/AppStoragePage2" })  
        })  
    }  
  }  
}

 

    **import** { router } **from** '@kit.ArkUI'  
  
@Entry  
@Component  
**struct** AppStoragePage2 {  
  
  @State IDinfo: Record<string, string> = {}  
  aboutToAppear(): void {  
    **const** IDInfo = AppStorage.get<Record<string, string>>("IDInfo")  
    **this**.IDinfo = IDInfo!  
  }  
  
  build() {  
    Column({ space: 12 }) {  
      Text("我是页面二")  
      Text(`姓名: ${**this**.IDinfo.name}`)  
      Text(`年龄: ${**this**.IDinfo.age}`)  
      Button("点击返回")  
        .onClick(() => {  
          router.back()  
        })  
    }  
  }  
}

 

第二种演示

[AppStorage2.mp4] live.csdn.net/v/468905

    **import** { router } **from** '@kit.ArkUI'  
  
AppStorage.setOrCreate("Name", "老王")  
AppStorage.setOrCreate("Age", "31")  
  
@Entry  
@Component  
**struct** AppStoragePage {  
  
  @StorageLink("Name") name: string = ""  
  @StorageProp("Age") age: string = ""  
  aboutToAppear(): void {  
    **this**.name = AppStorage.get<string>("Name")!  
    **this**.age = AppStorage.get<string>("Age")!  
  }  
  build() {  
    Column({ space: 12 }) {  
      Text("我是页面一")  
      Text(`姓名: ${**this**.name}`)  
      Button("改名")  
        .onClick(() => { **this**.name = "小王" })  
      Text(`年龄: ${**this**.age}`)  
      Button("修改年龄")  
        .onClick(() => { **this**.age = "18" })  
      Button("点击跳转")  
        .onClick(() => {  
          router.pushUrl({ url: "pages/AppStor/AppStoragePage2" })  
        })  
    }  
  }  
}

 

    **import** { router } **from** '@kit.ArkUI'  
  
@Entry  
@Component  
**struct** AppStoragePage2 {  
  
  @StorageLink("Name") name: string = ""  
  @StorageProp("Age") age: string = ""  
  aboutToAppear(): void {  
    **this**.name = AppStorage.get<string>("Name")!  
    **this**.age = AppStorage.get<string>("Age")!  
  }  
  
  build() {  
    Column({ space: 12 }) {  
      Text("我是页面二")  
      Text(`姓名: ${**this**.name}`)  
      Button("改名")  
        .onClick(() => { **this**.name = "老王" })  
      Text(`年龄: ${**this**.age}`)  
      Button("修改年龄")  
        .onClick(() => { **this**.age = "16" })  
      Button("点击返回")  
        .onClick(() => {  
          router.back()  
        })  
    }  
  }  
}

通过上述两个示例我们可以了解到了AppStorage的基本用法

 

Harmony OS  NEXT   API12

本次就暂时介绍这么多

谢谢各位的观看,有错误不足的地方, 本人乐于接受各位的意见