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)

想问一下,这种写法有什么特定的含义,实现了什么特定的能力么?

6 回复

背景知识:

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 实例注入到页面入口,使得该页面及其所有子组件能够访问和操作同一份状态数据。
  • 这适用于需要跨页面保持状态一致性的场景,例如用户配置、主题设置或应用全局数据。

这种写法简化了状态管理,避免了通过组件树逐层传递数据的复杂性,同时支持响应式更新。

回到顶部