ArkUI中自定义组件的生命周期

文章概叙

本文主要是介绍下在作为page以及component的时候的生命周期,以及调用API等应该在哪个生命周期使用。

书接上回

之前的博客已经结束了对底部栏的操作,现在开始需要关注到具体内容的对接了。

而开发的第一步,我们对页面的生命周期必须要有很深入的了解,因为有开发经验的同学们都知道,做前端开发的时候,我们获取数据API的接口,都是在页面创建完成时调用,而在页面即将被销毁的时候,我们需要去关闭定时器、数据监听等操作。所以我们必须知道在哪个阶段,我们应该做什么。这些可都是面试的知识点来的。

综上述,本篇博客最主要的内容是讲下生命周期,以及在开发的时候,我们调用API,初始化一些数据的操作应该在哪些生命周期中进行。

页面与自定义组件的区别

自定义组件:@Component装饰的UI单元,可以组合多个系统组件实现UI的复用,可以调用组件的生命周期。

页面:即应用的UI页面。可以由一个或者多个自定义组件组成,@Entry装饰的自定义组件为页面的入口组件,即页面的根节点,一个页面有且仅能有一个@Entry。只有被@Entry装饰的组件才可以调用页面的生命周期。

像是我们的Mine以及Found组件,由于想要做到不使用tab的时候,也可以正常的访问,所以我们在其中加入了@Entry的修饰符,使其属于页面。

而文章中为什么要区分是否为页面组件,官网上也给出了具体原因,是因为页面组件以及自定义组件各有一套生命周期。

页面生命周期,即被@Entry装饰的组件生命周期,提供以下生命周期接口:

  • onPageShow

    页面每次显示时触发一次,包括路由过程、应用进入前台等场景,仅@Entry装饰的自定义组件生效。

  • onPageHide

    页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景,仅@Entry装饰的自定义组件生效。

  • onBackPress

    当用户点击返回按钮时触发,仅@Entry装饰的自定义组件生效。

即当页面被切换显示的时候,各监听一次,当用户点击了返回按钮的时候,也会触发一次事件。

所以我们可以这么地去理解:

当onPageShow触发,既显示页面的时候,我们可以去拉数据显示出来

当onPageHide触发,即隐藏页面的时候,我们可以停止当前的一些操作,比如计时之类的。

当onBackPress触发,即用户想要退出当前页面的时候,我们就可以询问用户是否离开页面,以便做保存的操作。

而在@component修饰的组件中,还有一下两种方法

  • aboutToAppear

    组件即将出现时回调该接口,具体时机为在创建自定义组件的新实例后,在执行其build()函数之前执行。

  • aboutToDisappear

    在自定义组件析构销毁之前执行。不允许在aboutToDisappear函数中改变状态变量,特别是@Link变量的修改可能会导致应用程序行为不稳定。

也就是说,对于一些内部组件来说,并没有刚刚@Entry修饰器的返回、显示、隐藏之类的,所以我们在显示组件的时候,就只有以下两个生命周期:

当组件已经被实例化,但是还没显示在页面上的时候。aboutToAppear会被调用。

当组件即将被销毁的时候,aboutToDisappear会被调用。

而@Entry修饰的页面,则会含有上述的五个生命周期,

即下面的图

开始代码

在对生命周期有了基础准备工作之后,我们接下来只需要实验一些其中的生命周期,看是否符合我们的想法。

就拿我们的Mine页面做一次测试,测试代码如下,将五个都添加到了mine.ets中,接着从tab页面访问进入.

@Entry
@Component
export struct Mine {
  @State message: string = '这个是mine页面'

  onPageShow() {
    console.log("当前调用了pageShow方法")
  }

  onPageHide(){
    console.log("当前调用了pageHide方法")
  }
  onBackPress(){
    console.log("当前调用了onBackPress方法");
  }

  aboutToAppear(){
    console.log("当前调用了aboutToAppear方法");
  }
  aboutToDisappear(){
    console.log("当前调用了aboutToDisappear方法")
  }
  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
      }
      .width('100%')
    }
    .height('100%')
  }
}

此时,页面还没渲染完成,就已经调用了aboutToAppear方法。

但是点击了上面的"我的"之后,并没有如期的显示出“onPageShow”被调用的字样,可见当前作为一个页面中的组件展示出来的时候,并没有拥有页面的生命周期,而不是简单的页面中添加了一个@Entry的时候,就无论何时何地都是一个页面了

接下来,我们需要校验下作为页面的时候,是否拥有上述的五个生命周期。

因此,我们需要直接在编译器中直接在mine.ets页面点击保存(最主要是当前窗口在mine.ets页面),点击previewer的刷新按钮,这时候我们的mine.ets就履行了他的@Entry义务,作为一个页面进行渲染。

此时,页面就直接显示了这么两个事件。

且多次点击返回按钮,日志中也出现了返回的事情日志

因此,我们可以确定,当我们要初始化一些数据,比如调用Api的时候,我们可以在"aboutToAppear"中去做处理。

当我们要清理定时器的时候,可以在”aboutToDisappear“中处理

为了能让大家更好的学习鸿蒙 (OpenHarmony) 开发技术,这边特意整理了《鸿蒙 (OpenHarmony)开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙 (OpenHarmony)开发学习手册》

入门必看:https://qr21.cn/FV7h05

  1. 应用开发导读(ArkTS)
  2. ……

HarmonyOS 概念:https://qr21.cn/FV7h05

  1. 系统定义
  2. 技术架构
  3. 技术特性
  4. 系统安全

如何快速入门?:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. 构建第一个JS应用
  4. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……

<think>嗯,用户问的是ArkUI自定义组件生命周期接口有哪些。首先,我得确认ArkUI是什么,因为可能有人会混淆不同的框架。ArkUI华为的鸿蒙系统应用开发框架,对吧?所以这里的生命周期应该是指鸿蒙应用开发中的组件生命周期。 接下来,我需要回忆一下HarmonyOS的文档或者之前学过的内容。ArkUI有两种开发范式,类Web的声明式开发范式,以及更偏向原生的方舟开发框架。不过用户提到的是自定义组件生命周期接口,可能更偏向于声明式开发,比如ETS(Extended TypeScript)或者类似的方式。 在HarmonyOSArkUI中,自定义组件通常是通过@Component装饰器定义的。组件生命周期包括创建、渲染、更新和销毁这几个阶段。常见的生命周期回调应该包括aboutToAppear、aboutToDisappear,可能还有onPageShow、onPageHide之类的页面相关的方法? 需要区分组件级别的生命周期和页面级别的。用户问的是自定义组件的,所以重点可能在组件自身的生命周期方法。比如,当组件被创建时触发的回调,或者即将消失时的回调。比如,aboutToAppear在组件即将出现时被调用,可以在这里初始化数据;aboutToDisappear在组件即将被销毁时调用,用于资源释放。 另外,可能还有其他生命周期方法,比如onPageShow,当页面显示时触发,但这是否属于组件还是页面的呢?如果是页面生命周期,可能和组件的不同。需要确认这些方法是否属于自定义组件的接口。 还需要注意,ArkUI可能有不同的版本,比如3.0、3.1等,不同版本之间生命周期是否有变化?可能要保持更新,但通常核心的生命周期方法不会经常变动。 此外,自定义组件可能还有一些状态管理相关的装饰器,比如@State、@Prop,但这些属于状态管理而非生命周期生命周期方法主要是关于组件挂载、卸载时的回调。 可能需要查阅官方文档来确认具体的接口名称。例如,在ETS中,自定义组件生命周期确实包括aboutToAppear和aboutToDisappear,这两个是最常用的。可能还有其他如onLayout、onReady等,但这些可能属于事件回调而非严格的生命周期阶段。 总结一下,ArkUI自定义组件生命周期接口主要包括: 1. aboutToAppear:组件创建后触发,用于初始化。 2. aboutToDisappear:组件销毁前触发,用于清理资源。 3. 页面相关的回调可能需要使用页面的生命周期,如onPageShow,但可能属于页面而非组件本身。 需要确保回答准确,并给出示例代码说明如何使用这些接口。同时提醒用户注意这些接口的使用场景和注意事项,比如避免耗时操作。</think>在ArkUIHarmonyOS应用开发框架)中,自定义组件生命周期接口主要包括以下核心方法,按执行顺序分为三个阶段: --- ### 一、组件创建阶段 1. **`aboutToAppear()`** - **触发时机**:组件实例化完成,但尚未渲染到界面时调用 - **用途**:初始化数据、订阅事件、请求网络等 - **示例**: ```typescript @Component struct MyComponent { aboutToAppear() { console.log('组件即将显示'); } } ``` --- ### 二、组件更新阶段 2. **`aboutToUpdate()`** (部分版本支持) - **触发时机**:组件状态(`@State`、`@Prop`等)变化导致重新渲染前调用 - **用途**:在更新前执行特定逻辑(如记录旧值) --- ### 三、组件销毁阶段 3. **`aboutToDisappear()`** - **触发时机**:组件从界面移除前调用 - **用途**:释放资源(取消定时器、断开连接等) - **示例**: ```typescript @Component struct MyComponent { timer: number = 0; aboutToAppear() { this.timer = setInterval(() => {}, 1000); } aboutToDisappear() { clearInterval(this.timer); // 清理定时器 } } ``` --- ### 四、补充说明 - **页面级生命周期**:若组件关联页面,还可通过`Page`的接口监听: - `onPageShow()`:页面显示时触发 - `onPageHide()`:页面隐藏时触发 - `onBackPress()`:物理返回键触发 --- ### 注意事项 1. 避免在生命周期函数中执行耗时操作(如大文件读写) 2. `aboutToAppear`和`aboutToDisappear`必须成对实现,确保资源正确释放 3. 父子组件生命周期顺序:父组件`aboutToAppear` → 子组件`aboutToAppear` → 子组件`aboutToDisappear` → 父组件`aboutToDisappear` 通过合理利用这些接口,可以实现组件状态的精准控制和资源的高效管理。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值