应用状态-LocalStorage

ArtTS提供了好几种状态用来帮助我们管理我们的全局数据

  • State组件内状态
  • LocalStorage-UIAbility状态(内存- 注意:和前端的区分开,它非持久化,非全应用)
  • AppStorage- 应用内状态-多UIAbility共享-(内存-非持久化-退出应用同样消失)
  • PersistenStroage-全局持久化状态(写入磁盘-持久化状态-退出应用 数据同样存在)

1.1、UIAbility内状态-LocalStorage

LocalStorage 是页面级的UI状态存储,通过 @Entry 装饰器接收的参数可以在页面内共享同一个 LocalStorage 实例。 LocalStorage 也可以在 UIAbility 内,页面间共享状态。
用法

  • 创建 LocalStorage 实例:const storage = new LocalStorage({ key: value })
  • 单向 @LocalStorageProp('user') 组件内可变
  • 双向 @LocalStorageLink('user') 全局均可变

1.1.1、页面内

1)一个页面内

// Record 为字典,map结构
let user:Record<string, UserInfoClass> = {
  "user": {
    username: '哈哈',
    age: 28
  }
}
const local =new LocalStorage(user) // 得到LocalStorage的对象

@Entry(local) // 使用entry包括,表示可以被当前页面LocalStorageCase所使用
@Component
struct LocalStorageCase {
  @LocalStorageProp("user") // 去除user数据给到myUser对象
  myUser:Partial<UserInfoClass> = {} // Partial是个泛型工具,把类型中的所有属性都变成可选;
  // myUser:UserInfoClass = {} as UserInfoClass
  @LocalStorageLink("user") // 双向,可更改数据
  myUser2:Partial<UserInfoClass> = {}
  build() {
    Row() {
      Column() {
        Row() {
          Text(this.myUser.username)
          Text(this.myUser.age.toString())
        }
        Button('更改数据')
          .onClick(() => {
            this.myUser2.username = 'haha'
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

export class UserInfoClass {
  username:string = ''
  age:number = 0
}

2)两个页面内

  • 页面1
// Record 为字典,map结构
import router from '@ohos.router'
let user:Record<string, UserInfoClass> = {
  "user": {
    username: '哈哈',
    age: 28
  }
}
const local =new LocalStorage(user) // 得到LocalStorage的对象
export {local} // 导出LocalStorage对象
@Entry(local)
@Component
struct LocalStorageCase {
  @LocalStorageProp("user") // 取出user数据给到myUser对象
  myUser:Partial<UserInfoClass> = {}
  @LocalStorageLink("user") // 双向,可更改数据
  myUser2:Partial<UserInfoClass> = {}
  build() {
    Row() {
      Column() {
        Row() {
          Text(this.myUser.username)
          Text(this.myUser.age.toString())
        }
        Button('更改数据')
          .onClick(() => {
            this.myUser2.username = 'haha'
          })
        Button('跳转')
          .onClick(() => {
            router.pushUrl({
              url:'pages/04/LocalStorageCase3'
            })
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

export class UserInfoClass {
  username:string = ''
  age:number = 0
}
  • 页面2
import {local, UserInfoClass} from './LocalStorageCase2' // 导入LocalStorage对象,UserInfoClass类
@Entry(local) // 使用entry包括,表示可以当前页面可以使用local对象
@Component
struct LocalStorageCase3 {
  @LocalStorageProp("user") // 取出user数据给到myUser对象
  myUser:Partial<UserInfoClass> = {} // Partial是个泛型工具,把类型中的所有属性都变成可选;
  @LocalStorageLink("user") // 双向,可更改数据
  myUser2:Partial<UserInfoClass> = {}
  build() {
    Row() {
      Column() {
        Row() {
          Text(this.myUser.username)
          Text(this.myUser.age.toString())
        }
      }
      .width('100%')
    }
    .backgroundColor(Color.Pink)
    .height('100%')
  }
}
  • 使用LocalStorageLink实现双向绑定
@LocalStorageLink("user") // 双向,可更改数据
myUser2:Partial<UserInfoClass> = {}
Button('更改数据')
          .onClick(() => {
            this.myUser2.username = 'haha'
          })
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容