第八节HarmonyOS @Component自界说组件的生命周期

打印 上一主题 下一主题

主题 803|帖子 803|积分 2409

在开始之前,我们先明确自界说组件和页面的关系:
1、自界说组件:@Component装饰的UI单位,可以组合多个系统组件实现UI的复用。
2、页面:即应用的UI页面。可以由一个大概多个自界说组件构成,@Entry装饰的自界说组件为页面的入口组件,即页面的根节点,一个页面有且仅能有一个@Entry。只有被@Entry装饰的组件才可以调用页面的生命周期。

页面生命周期,即被@Entry装饰的组件生命周期,提供以下生命周期接口:
onPageShow:页面每次表现时触发。
onPageHide:页面每次隐藏时触发一次。
onBackPress:当用户点击返回按钮时触发。
组件生命周期,即一样平常用@Component装饰的自界说组件的生命周期,提供以下生命周期接口:
aboutToAppear:组件即将出现时回调该接口,具体时机为在创建自界说组件的新实例后,在实行其build()函数之前实行。
aboutToDisappear:在自界说组件即将析构烧毁时实行。

有@Entity修饰的组件,既有页面的生命周期也有组件的生命周期:
  1. // Index.ets
  2. import router from '@ohos.router';
  3. @Entry
  4. @Component
  5. struct LifeCycleComponent {
  6.   @State showChild: boolean = true;
  7.   // 只有被 @Entry 装饰的组件才可以调用页面的生命周期
  8.   onPageShow() {
  9.     console.info('Index onPageShow');
  10.   }
  11.   // 只有被 @Entry 装饰的组件才可以调用页面的生命周期
  12.   onPageHide() {
  13.     console.info('Index onPageHide');
  14.   }
  15.   // 只有被 @Entry 装饰的组件才可以调用页面的生命周期
  16.   onBackPress() {
  17.     console.info('Index onBackPress');
  18.   }
  19.   // 组件生命周期
  20.   aboutToAppear() {
  21.     console.info('LifeCycleComponent aboutToAppear');
  22.   }
  23.   // 组件生命周期
  24.   aboutToDisappear() {
  25.     console.info('LifeCycleComponent aboutToDisappear');
  26.   }
  27.   build() {
  28.     Column() {
  29.       // this.showChild 为 true,创建 Child 子组件,执行 Child aboutToAppear
  30.       if (this.showChild) {
  31.         Child()
  32.       }
  33.       // this.showChild 为 false,删除 Child 子组件,执行 Child aboutToDisappear
  34.       Button('create or delete Child').onClick(() => {
  35.         this.showChild = false;
  36.       })
  37.       // push 到 Page2 页面,执行 onPageHide
  38.       Button('push to next page')
  39.         .onClick(() => {
  40.           router.pushUrl({ url: 'pages/Page2' });
  41.         })
  42.     }
  43.   }
  44. }
复制代码
无@Entity修饰的组件,只有组件的生命周期:
  1. @Component
  2. struct Child {
  3.   @State title: string = 'Hello World';
  4.   // 组件生命周期
  5.   aboutToDisappear() {
  6.     console.info('[lifeCycle] Child aboutToDisappear')
  7.   }
  8.   // 组件生命周期
  9.   aboutToAppear() {
  10.     console.info('[lifeCycle] Child aboutToAppear')
  11.   }
  12.   build() {
  13.     Text(this.title).fontSize(50).onClick(() => {
  14.       this.title = 'Hello ArkUI';
  15.     })
  16.   }
  17. }
复制代码
总结:
第一个页面Index页面有@Entity修饰,第二个页面Second中无@Entity修饰
1、首次打开应用,加载的是Index页,生命周期是:

2、页面从index 跳转到 Second页,生命周期是:

3、在Second页将应用后台运行并且会前台:

4、页面从Second跳转到 index 页,生命周期是:

5、烧毁应用,,生命周期是:



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小秦哥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表