HarmonyOS 鸿蒙Next Localstorage页面级UI状态存储文档的建议

发布于 1周前 作者 htzhanglong 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next Localstorage页面级UI状态存储文档的建议(可能是错的,勿喷)

// 小白向大佬学习

LocalStorage示范文档里面描述特简单,而且我看了下文档并实际测试了,当存储的是一个空对象时,link以及prop初始化这个对象(多层嵌套对象),在entry组件当中也出现了不显示或者偶尔显示以及直接报错的问题

建议(maybe):link、prop分别指向LocalStoragelink和LocalStorageProp

1、测试用例能不能不要写用string number这些基本数据类型做测试?可否采用复杂一点的?或者把复杂类型的一并写上?这样就不用学习者反复做测试了,特别是对于小白伤害太大了,直接在嵌套里面写一个数组类型或者字符类型的不是更好吗(比如下面的例子中的数据),只需要一个用例就可以解决问题,一举多得

2、还有就是有没有可能能有个地方可以观察到这部分存储的数据?类似于浏览器的localstorage可以直接可视化

3、new LocalStorage({ ‘PropA’: 47 })  里面数据类型 ‘PropA’: 47(数值47)是否可以和link以及prop初始化的不一样?还是说必须一致,这部分文档也没有反应,自己有测过直接new LocalStorage(‘PropA’),可以在link以及prop初始化这个PropA,但是初始化的数据只能是number以及string类型,其他类型不生效

4、当一个页面有多个new LocalStorage()除了第一个外的其他new LocalStorage()是否会生效?我写了测试结果是除了第一个外后面的不生效,这部分内容也希望在文档里面有所反应

我是一个小白,这是我目前遇到的一些关于LocalStorage的问题,看完文档以及测试过后我感觉很迷惑

// 创建新实例并使用给定对象初始化  下面是一个官网给的示例,我把new LocalStorage({ ‘PropA’: 47 });改成了空对象,测试改成其他的也会报错
let storage = new LocalStorage({ ‘PropA’: {} });

@Component
struct Child {
// @LocalStorageLink变量装饰器与LocalStorage中的’PropA’属性建立双向绑定
// @LocalStorageLink(‘PropA’) storLink2: number = 1;

build() {
// Button(Child from LocalStorage ${this.storLink2})
// // 更改将同步至LocalStorage中的’PropA’以及Parent.storLink1
// .onClick(() => this.storLink2 += 1)
}
}
// 使LocalStorage可从@Component组件访问
@Entry(storage)
@Component
struct CompA {
@LocalStorageLink(‘PropA’) storLink3: object = { name: ‘张三’, children: { address: [‘云南’] } };

build() {
Column({ space: 15 }) {
Text(‘测试’)
Text(this.storLink3[‘name’] +‘45554545454’)
}
}
}
//对象里面的name不显示为undefinded,前面测试了一次正常显示
// 假设我直接写
Text(this.storLink3[‘children’].address[0])

报错信息
04-15 20:45:43.626 E C03900/Ace: [Engine Log]Lifetime: 0.000000s

04-15 20:45:43.626 E C03900/Ace: [Engine Log]Js-Engine: ark

04-15 20:45:43.626 E C03900/Ace: [Engine Log]page: pages

04-15 20:45:43.626 E C03900/Ace: [Engine Log]Error message: Cannot read property address of undefined

04-15 20:45:43.626 E C03900/Ace: [Engine Log]Cannot get SourceMap info, dump raw stack:

04-15 20:45:43.626 E C03900/Ace: [Engine Log]Stacktrace:

04-15 20:45:43.626 E C03900/Ace: [Engine Log]    at anonymous (entry

04-15 20:45:43.626 E C03900/Ace: [Engine Log]    at observeComponentCreation (

04-15 20:45:43.626 E C03900/Ace: [Engine Log]    at initialRender (entry

04-15 20:45:43.626 E C03900/Ace: [Engine Log]    at initialRenderView (

只能理解Cannot read property address of undefined 

//还有就是就算在entry里面能显示了,在子组件里面也会报一样的错误,子组件内也是初始化了的… 表示很迷惑

3 回复

开发者您好,可以查看最新的文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-localstorage-V5

断点调试可以看见存储的数据,一个Entry只能绑定一个localstorage

建议不用localStroage,直接上AppStorage(doge

关于HarmonyOS 鸿蒙Next LocalStorage页面级UI状态存储文档的建议,以下是我的专业解答:

LocalStorage在HarmonyOS中是一个用于页面级UI状态存储的机制。它允许开发者在UIAbility内或页面间共享状态数据。通过@Entry装饰器,页面可以共享同一个LocalStorage实例,实现状态数据的共享。

LocalStorage提供了两个关键的装饰器:@LocalStorageProp@LocalStorageLink@LocalStorageProp用于建立与LocalStorage中给定属性的单向同步关系,而@LocalStorageLink则用于建立双向同步关系。这意味着,当使用@LocalStorageLink装饰的变量值发生变化时,该变化会同步回LocalStorage中,并可能触发相关组件的重新渲染。相反,@LocalStorageProp装饰的变量值变化不会同步回LocalStorage。

此外,LocalStorage实例的生命周期由应用程序管理。当应用程序释放最后一个指向LocalStorage的引用时,LocalStorage将被垃圾回收。

在文档方面,建议明确以下几点:

  1. 强调LocalStorage在页面级UI状态存储中的重要性,并解释其与其他存储机制(如AppStorage和PersistentStorage)的区别。
  2. 详细介绍@LocalStorageProp@LocalStorageLink的使用场景和区别,包括如何初始化、如何同步数据等。
  3. 提供更多示例代码,展示如何在UI组件中使用LocalStorage进行状态管理。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部