HarmonyOS鸿蒙Next中@Entry(storage)这种写法有什么特定的意义?
HarmonyOS鸿蒙Next中@Entry(storage)这种写法有什么特定的意义? 在查看sharekit的sample code的index文件中发现有这种代码的写法,但没有搜到其它的storage操作
// 获取共享的storage实例
// Obtaining a Shared Storage Instance
let storage = LocalStorage.getShared();
[@Entry](/user/Entry)(storage)
想问一下,这种写法有什么特定的含义,实现了什么特定的能力么?
背景知识:
LocalStorage是页面级的UI状态存储,通过@Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。LocalStorage支持UIAbility实例内多个页面间状态共享。
问题解决:
也就是说,他是一个存储数据的空间,可以在 UIAbility 类中将值传递到 page页面中如下:
//UIAbility 的方法
onWindowStageCreate(windowStage: window.WindowStage) {
// Main window is created, set main page for this ability
let parm:Record<string,number> = {"second":100}
let storage = new LocalStorage(parm)
//创建一个数据存入 page页面
windowStage.loadContent("pages/TabsPage", storage,(err, data) => {
});
}
//page页面接收
const storage = LocalStorage.GetShared()
[@Entry](/user/Entry)(storage)
@Component
struct DownloadPage {
@LocalStorageProp("second") second: number = 0
aboutToAppear(): void {
//在页面中可以获取到 UIAbility 写入的参数值
console.log(" aboutToAppear -> " + this.second)
}
//其他代码
}
更多关于HarmonyOS鸿蒙Next中@Entry(storage)这种写法有什么特定的意义?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
@Entry(storage) 通过绑定 LocalStorage 实例,为鸿蒙应用提供了高效的状态共享与同步方案,尤其适合复杂页面中多组件需频繁交互数据的场景。其核心优势在于减少冗余状态传递,提升代码可维护性。
使用场景
1/ 在UIAbility初始化时创建 LocalStorage 实例并通过 windowStage.loadContent 传递,使多个页面共享同一实例:
// EntryAbility.ets
const storage = new LocalStorage({ 'count': 0 });
windowStage.loadContent('pages/Index', storage); //
2/ 组件间双向绑定—父组件通过 @Entry(storage) 绑定实例,子组件通过装饰器实现双向同步:
// 父页面
let storage = LocalStorage.getShared();
[@Entry](/user/Entry)(storage)
@Component
struct ParentPage {
@LocalStorageLink('count') count: number = 0;
}
// 子组件
@Component
struct ChildPage {
@LocalStorageLink('count') count: number = 0; // 自动同步
}
期待HarmonyOS能在未来推出更多针对企业用户的解决方案。
@Entry(storage) 表示将当前页面入口组件与指定的 LocalStorage 实例绑定,使该实例在页面内的所有子组件中共享
// 获取UIAbility共享的Storage实例
let storage = LocalStorage.getShared();
// 绑定该实例到页面入口
[@Entry](/user/Entry)(storage)
@Component
struct MyPage {
@LocalStorageLink('theme') theme: string = 'light'; // 双向绑定
build() {
Column() {
Text(this.theme)
.onClick(() => {
this.theme = 'dark'; // 修改会同步到storage及其他绑定组件
})
}
}
}
在HarmonyOS鸿蒙Next中,@Entry(storage)
用于标记一个组件作为入口点,并启用本地存储功能。storage
参数允许该组件自动持久化和管理其状态,确保应用重启后数据不丢失。这种写法简化了状态管理,无需手动处理存储逻辑。
在HarmonyOS Next中,@Entry(storage)
这种写法用于将 LocalStorage
实例与当前页面的根组件(即 @Entry
装饰的组件)进行绑定,从而实现页面级的状态共享和数据持久化能力。
具体来说:
LocalStorage.getShared()
获取的是一个应用内全局共享的存储实例,可以在多个页面或组件间同步数据。- 通过
@Entry(storage)
将共享的storage
实例注入到页面入口,使得该页面及其所有子组件能够访问和操作同一份状态数据。 - 这适用于需要跨页面保持状态一致性的场景,例如用户配置、主题设置或应用全局数据。
这种写法简化了状态管理,避免了通过组件树逐层传递数据的复杂性,同时支持响应式更新。