HarmonyOS 鸿蒙Next Localstorage页面级UI状态存储文档的建议
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里面能显示了,在子组件里面也会报一样的错误,子组件内也是初始化了的… 表示很迷惑
开发者您好,可以查看最新的文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-localstorage-V5
断点调试可以看见存储的数据,一个Entry只能绑定一个localstorage
关于HarmonyOS 鸿蒙Next LocalStorage页面级UI状态存储文档的建议,以下是我的专业解答:
LocalStorage在HarmonyOS中是一个用于页面级UI状态存储的机制。它允许开发者在UIAbility内或页面间共享状态数据。通过@Entry装饰器,页面可以共享同一个LocalStorage实例,实现状态数据的共享。
LocalStorage提供了两个关键的装饰器:@LocalStorageProp和@LocalStorageLink。@LocalStorageProp用于建立与LocalStorage中给定属性的单向同步关系,而@LocalStorageLink则用于建立双向同步关系。这意味着,当使用@LocalStorageLink装饰的变量值发生变化时,该变化会同步回LocalStorage中,并可能触发相关组件的重新渲染。相反,@LocalStorageProp装饰的变量值变化不会同步回LocalStorage。
此外,LocalStorage实例的生命周期由应用程序管理。当应用程序释放最后一个指向LocalStorage的引用时,LocalStorage将被垃圾回收。
在文档方面,建议明确以下几点:
- 强调LocalStorage在页面级UI状态存储中的重要性,并解释其与其他存储机制(如AppStorage和PersistentStorage)的区别。
- 详细介绍@LocalStorageProp和@LocalStorageLink的使用场景和区别,包括如何初始化、如何同步数据等。
- 提供更多示例代码,展示如何在UI组件中使用LocalStorage进行状态管理。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。