鸿蒙中 @entry 装饰器的作用

本文同步发表于我的微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新

一、@entry 的核心作用

@entry 是应用入口组件的装饰器,标记该组件为应用的主入口页面

将结构体标记为页面组件,代表一个完整的页面

  • @Entry装饰器用于标识一个自定义组件作为应用的入口页面。当应用启动时,系统会自动加载并渲染被@Entry标记的组件。
  • 每个UIAbility(应用的能力单元)必须包含至少一个@Entry装饰的组件作为其根页面。

二、使用方式

  1、在Stage模型开发中,@Entry必须与@Component联合使用。

// 1. 最简形式 - 标记入口组件
@Entry
@Component
struct Index {
  build() {
    // 首页UI内容
  }
}

// 2. 配合其他装饰器使用
@Entry
@Component
struct MyApp {
  @State private count: number = 0
  
  build() {
    Column() {
      Text('Hello World')
        .fontSize(50)
    }
  }
}

2、单一性 - 每个模块只能有一个 @Entry

// 错误:一个模块中有多个 @Entry
@Entry  // 第一个入口
@Component
struct Page1 {
  // ...
}

@Entry  // 编译错误:重复的 @Entry
@Component
struct Page2 {
  // ...
}




// 正确:只有一个 @Entry
@Entry
@Component
struct MainPage {
  // ...
}

@Component
struct OtherPage {
  // 普通页面,不是入口
  // ...
}

3、必需性 - UIAbility 必须加载 @Entry 组件

// Ability 中加载 Entry 组件
import UIAbility from '@ohos.app.ability.UIAbility'
import window from '@ohos.window'

export default class EntryAbility extends UIAbility {
  onWindowStageCreate(windowStage: window.WindowStage) {
    // 必须加载 @Entry 装饰的组件
    windowStage.loadContent('pages/Index', (err, data) => {
      // Index 页面必须使用 @Entry 装饰
    })
  }
}

// pages/Index.ets
@Entry  // 必须有 @Entry
@Component
struct Index {
  build() {
    // ...
  }
}
  1. 单页应用基础
    • 一个应用可包含多个@Entry装饰的页面,通过路由机制实现页面跳转(如router.pushUrl)。
  2. 生命周期管理
    • @Entry标记的组件会自动关联页面的生命周期回调(如onPageShowonPageHide)。

注意:

  • @Entry只能修饰自定义组件(用@Component定义的结构体),不能用于普通函数或类
  • 若未声明@Entry,应用将因缺少入口页面而无法启动

三、@entry 的参数配置

@Entry 支持可选参数:

// 1. 配置路由参数
@Entry({
  routeName: 'main',      // 路由名称
  storage: new LocalStorage(),  // 存储方式
  useSharedStorage: true   
})
@Component
struct Index {
  build() {
    // ...
  }
}

参数说明:

参数类型说明
routeNamestring页面路由名称(可用于命名路由跳转,比如:跨模块跳转等)
storageLocalStorage组件存储方式
useSharedStorageboolean控制是否使用共享的LocalStorage实例(默认值false)
### @Entry 装饰器的功能和使用方法 在 HarmonyOS 应用开发中,`@Entry` 是一个非常重要的装饰器,用于标记某个组件为应用的入口点。它通常与 `@Component` 一起使用,表示该组件是应用的主界面或页面的起点。 #### 功能 - **标记入口组件**:`@Entry` 装饰器作用是告诉框架该组件是应用的入口点,系统会从这里开始构建用户界面。 - **与 @Component 配合使用**:`@Entry` 必须和 `@Component` 一起使用,`@Component` 表示该结构体是一个 UI 组件,而 `@Entry` 则标记该组件为入口。 #### 使用示例 以下是一个典型的使用 `@Entry` 和 `@Component` 的示例代码: ```typescript import router from '@ohos.router'; @Component @Entry struct Index { @State message: string = 'Hello World'; build() { Row() { Column() { Text(this.message) .fontSize(50) .fontWeight(FontWeight.Bold) .onClick(() => { // 点击后跳转到另一个页面 router.pushUrl({ url: 'pages/SecondPage' }); }) } .width('100%') } .height('100%') } } ``` 在这个示例中: - `@Component` 表示 `Index` 是一个 UI 组件。 - `@Entry` 标记 `Index` 为应用的入口组件。 - `@State` 是另一个常见的装饰器,用于声明一个响应式状态变量 `message`,当它的值发生变化时,UI 会自动更新。 - 在 `build()` 方法中定义了该组件的 UI 结构,使用了 `Row` 和 `Column` 布局,并通过 `Text` 显示了一段文字。 - 当用户点击文字时,会通过 `router.pushUrl` 跳转到另一个页面。 #### 注意事项 - 每个页面只能有一个入口组件,即只能有一个组件被同时标记为 `@Entry` 和 `@Component`。 - 入口组件通常是应用的主页面,其他页面可以通过路由机制从入口组件跳转到其他页面。 通过使用 `@Entry`,开发者可以清晰地定义应用的启动页面,并且能够方便地管理页面的生命周期和导航逻辑。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值