【鸿蒙HarmonyOS NEXT】页面和自定义组件生命周期
【鸿蒙HarmonyOS NEXT】页面和自定义组件生命周期
- 一、环境说明
- 二、页面和自定义组件生命周期
- 三、示例代码加以说明
- 四、小结
一、环境说明
-
DevEco Studio 版本:

-
API版本:
以12为主

二、页面和自定义组件生命周期
需要明确几个概念:
-
页面Page
即应用的UI页面。可以由一个或者多个自定义组件组成,@Entry装饰的自定义组件为页面的入口组件,即页面的根节点,一个页面有且仅能有一个@Entry。只有被@Entry装饰的组件才可以调用页面的生命周期。
页面生命周期,即被@Entry装饰的组件生命周期,提供以下生命周期接口:- onPageShow:页面每次显示时触发。
- onPageHide:页面每次隐藏时触发一次。
- onBackPress:当用户点击返回按钮时触发。
-
自定义组件Component
@Component装饰的UI单元,可以组合多个系统组件实现UI的复用。
组件生命周期,即一般用@Component装饰的自定义组件的生命周期,提供以下生命周期接口:- aboutToAppear:组件即将出现时回调该接口,具体时机为在创建自定义组件的新实例后,在执行其build()函数之前执行。
- aboutToDisappear:在自定义组件即将析构销毁时执行。
-
当被@Entry和@Component装饰器同时装饰的页面的生命周期流程如下图所示

需要注意的是,部分生命周期回调函数仅对@Entry修饰的自定义组件生效,它们分别是:onPageShow、onPageHide、onBackPress。
三、示例代码加以说明
- 新建项目取名为pagelifecyc的工程,当工程被创建成功后,默认只有一个Index.ets页面。
- 新建一个目录,取名为view。
- 在view目录下新建一个ArkTS File,取名为TestComponent,使用@Component装饰器修饰,作为自定义组件,并实现aboutToAppear()和aboutToDisappear()函数,具体代码如下:
/*** 自定义组件,生命周期测试*/ @Preview // 为了在单个自定义组件中查看效果,可以去掉 @Component export struct TestComponent{// 定义数据用于List组件@State arr: number[] = [0,1,2,4,5,6,7,8,9]// 生命周期函数测试aboutToAppear(): void {console.info('--自定义组件被创建时,aboutToAppear函数被调用----')}aboutToDisappear(): void {console.info('--自定义组件被销毁时,aboutToDisappear函数被调用----')}/*** UI布局部分*/build() {Column(){List({space: 5}){ForEach(this.arr,(item: number)=> {ListItem(){Text(`项目${item}`).fontSize(15).fontWeight(FontWeight.Bold).width('100%').height(50).textAlign(TextAlign.Center).backgroundColor(0xF1F3F5)}})}}} } - 新建一个Page,取名为LifecycTestPage,默认已被@Entry和@Component装饰器装饰了。在该页面中实现引入TestComponent组件作为其子组件进行渲染,并实现onPageShow、onPageHide以及onBackPress函数,具体代码如下:
/*** 用于测试页面生命周期*/ import { TestComponent } from '../view/TestComponent';@Preview // 为了在单页面中查看效果,可以去掉 @Entry // @Entry装饰的组件变成了页面 @Component struct LifecycleTestPage {// 生命周期相关函数测试// 页面被创建时调用aboutToAppear(): void {console.info('--LifecycleTestPage页面被创建时,aboutToAppear函数被调用----')}// 页面被销毁时调用aboutToDisappear(): void {console.info('--LifecycleTestPage页面被销毁时,aboutToDisappear函数被调用----')}// 页面显示时调用onPageShow(): void {console.info('--LifecycleTestPage页面显示时,onPageShow函数被调用----')}// 页面隐藏时被调用onPageHide(): void {console.info('--LifecycleTestPage页面隐藏时,onPageHide函数被调用----')}// 返回键被点击时调用onBackPress(): boolean | void {console.info('--LifecycleTestPage页面返回键被点击时调用,onBackPress函数被调用----')}build() {Column() {// 引入自定义组件TestComponent()}.height('100%').width('100%').alignItems(HorizontalAlign.Center).justifyContent(FlexAlign.Center)} } - 在Index页面中添加跳转按钮,并引入路由,实现从Index页面跳转到LifecycTestPage页面中,具体代码如下:
import { router } from '@kit.ArkUI';@Entry @Component struct Index {@State message: string = '生命周期测试';@State btnMsg: string = '跳转';build() {Column() {Text(this.message).fontSize(20).width('100%').height(50).textAlign(TextAlign.Center).backgroundColor(0xF1F3F5).margin({bottom: 100})Button(this.btnMsg).width('80%').height(50).onClick(()=>{router.pushUrl({url: 'pages/LifecycleTestPage'})})}.height('100%').width('100%').alignItems(HorizontalAlign.Center).justifyContent(FlexAlign.Start)} } - 保持在Index页面,并点击右侧的预览按钮,进行编译和显示Index页面
页面效果:

点击跳转按钮,观察页面跳转的时候,控制台打印的日志信息,如下所示:

控制台打印出的日志如下:
点击预览界面手机顶部的I --LifecycleTestPage页面被创建时,aboutToAppear函数被调用---- I --自定义组件被创建时,aboutToAppear函数被调用---- I --LifecycleTestPage页面显示时,onPageShow函数被调用----退回按钮,观察页面跳转的时候,控制台打印的日志信息,如下所示:


控制台打印出的日志如下:I --LifecycleTestPage页面返回键被点击时调用,onBackPress函数被调用---- I --LifecycleTestPage页面隐藏时,onPageHide函数被调用---- I --LifecycleTestPage页面被销毁时,aboutToDisappear函数被调用---- I --自定义组件被销毁时,aboutToDisappear函数被调用----
四、小结
通过上述的说明和示例演示,相信大家已经很清楚Page页面和自定义组件的生命周期的区别了。细心的读者朋友可能已经发现在自定义组件中同样也可以编写onPageShow、onPageHide以及onBackPress等函数,感兴趣的读者朋友可以尝试下在自定义组件中编写onPageShow、onPageHide以及onBackPress等函数,看看这些函数是否在自定义组件也能被正常调用呢?欢迎大家的留言,我们在留言区进行讨论。
相关文章:
【鸿蒙HarmonyOS NEXT】页面和自定义组件生命周期
【鸿蒙HarmonyOS NEXT】页面和自定义组件生命周期 一、环境说明二、页面和自定义组件生命周期三、示例代码加以说明四、小结 一、环境说明 DevEco Studio 版本: API版本:以12为主 二、页面和自定义组件生命周期 需要明确几个概念: 页面…...
Node.js Express 框架
Node.js Express 框架 介绍 Express 是一个快速、开放、极简的 Node.js Web 框架。它为构建 Web 应用程序和服务提供了一个强大的工具集,使得开发过程更加高效和便捷。Express 的设计哲学是提供一个最小的 API,让开发者可以轻松地构建自定义的 Web 应用程序。它被广泛用于构…...
生日贺卡录放音芯片,多段音频录音ic生产厂商,NVF04M-32minute
可以录音播放的生日贺卡与传统的纸质贺卡相比,它有着创意以及个性的特点,仅需少量的电子元器件,即可实现录音功能,搭配上文字,让声音存储在生日贺卡里,让贺卡也变得有温度,祝福我想亲口对TA说。…...
电影《西施新传》首映礼,九月金秋全国正式公映
2024年9月1日,古装谋略情感影片《西施新传》在无锡大世界影城中山路IMAX激光店举办首映礼。电影《西施新传》根据作家沈雅琴、笔名一蝶的同名小说改编,以家喻户晓四大美人之首的西施为主人公,讲述了春秋末期吴越战争的故事。越国败于吴国&…...
【H2O2|全栈】关于CSS(1)CSS基础(一)
目录 CSS基础知识 前言 准备工作 啥是CSS? 如何引用CSS? 选择器 通配符选择器 类名(class)选择器 id选择器 CSS解析顺序(优先级) 常见CSS标签(一) 字体属性 font-style…...
动态规划算法之背包问题详细解读(附带Java代码解读)
动态规划中的背包问题(Knapsack Problem)是经典问题之一,通常用来解决选择一组物品放入背包使得背包的价值最大化的问题。根据问题条件的不同,背包问题有很多种变体,如0-1背包问题、完全背包问题、多重背包问题等。这里…...
Vue3+TypeScript二次封装axios
安装如下 npm install axios 第一步:创建config配置文件,用于存放请求后端的ip地址,用于后期打包后便于修改ip地址。 注:typescript要求参数要有类型。(ES6 定义对象 属性 类型 修改的是属性的值) inte…...
华为 HCIP-Datacom H12-821 题库 (16)
有需要题库的可以加下方Q群 V群进行学习交流 1. OSPF 邻居关系建立出现故障,通过 display ospf error 命令来检查,输出结果如图所示,根据图中内容分析,邻居建立失败的原因可能是以下哪一项? A、Process ID 不一致 B、…...
【论文分享精炼版】 sNPU: Trusted Execution Environments on Integrated NPUs
今天在COMPASS分享了之前写的一个博客,做了进一步的提炼总结,大家可以看看原文~ 今天分享的论文《sNPU: Trusted Execution Environments on Integrated NPUs》来自2024年ISCA,共同一作为Erhu Feng以及Dahu Feng。并且, 这两位作…...
MyBatis 入门之动态 SQL
文章目录 一、什么是动态 SQL二、MyBatis 中的动态 SQL 标签三、动态 SQL 的使用示例四、总结 在 Java 开发中,MyBatis 是一个非常流行的持久层框架,它提供了强大的 SQL 映射功能和动态 SQL 支持。动态 SQL 可以根据不同的条件动态地生成 SQL 语句&#…...
软工大二学生待办事项:
该文章会常年更新!坚持! 2024.9.10 学习打包部署 记录睡眠 开始刷一个算法 巩固Git版本控制工具的使用 巩固利用Idea使用版本管理工具,SQl编写 抓紧时间了解公司营业执照 坚持到周末再打瓦!...
MongoDB延迟查询
在 MongoDB 中,查看副本集成员之间的副本延迟可以通过以下步骤进行: 使用 rs.status() 命令: 这个命令提供了副本集的详细状态信息,包括每个成员的延迟情况。在 MongoDB shell 中,你可以执行以下命令: rs.s…...
python如何获取html中的所有链接
在Python中,获取HTML页面中的所有链接通常可以通过使用第三方库如BeautifulSoup或lxml来完成。这里,我将提供一个使用BeautifulSoup库的示例,因为它简单易用且功能强大。 首先,你需要安装BeautifulSoup和requests库(如…...
79-java static修饰的类能不能被继承
Java中的类可以被final关键字修饰,表示这个类不能被继承。如果一个类被final修饰,那么这个类不能被继承,也就是说,final类不能被继承。 另一方面,static关键字可以用来修饰内部类,这样的内部类是静态内部类…...
MacOS wine中文乱码问题
安装wine 1、brew update 执行失败,提示安装如下 2、git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask fetch --unshallow 3、git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow 3、brew update 4、brew in…...
基于Springboot的鲜花销售网站的设计与实现
项目描述 这是一款基于Springboot的鲜花销售网站的系统 模块描述 鲜花销售系统 1、用户 登录 在线注册 浏览商品 鲜花搜索 订购商品 查询商品详情 水果分类查看 水果加购物车 下单结算 填写收货地址 2、管理员 登录 用户管理 商品管理 订单管理 账户管理 截图...
安卓玩机工具-----适合安卓机型的“搞机工具箱” 功能齐全 玩机推荐
搞机工具箱最新版是一款相当出色的电脑端手机工具箱软件,搞机工具箱正式版功能强劲,可以帮助用户不需要root就能够直接对手机进行调节,方便对手机进行更加全面的掌控,搞机工具箱便捷好用,只需要根据文字提示及自己的需…...
数据分析-17-时间序列分析的平稳性检验
1 什么是时间序列 时间序列是一组按时间顺序排列的数据点的集合,通常以固定的时间间隔进行观测。这些数据点可以是按小时、天、月甚至年进行采样的。时间序列在许多领域中都有广泛应用,例如金融、经济学、气象学和工程等。 时间序列的分析可以帮助我们理解和预测未来的趋势和…...
Unity3D Android多渠道极速打包方案详解
在移动应用开发过程中,特别是在使用Unity3D进行Android游戏或应用开发时,多渠道打包是一个常见且重要的需求。不同的渠道(如Google Play、华为应用市场、小米应用商店等)可能需要不同的配置和包名,手动进行这些操作既耗…...
数据库中的主键和外键分别是什么意思?
让我们来聊聊数据库设计中非常重要的两个概念——主键(Primary Key)和外键(Foreign Key)。这两个概念对于保证数据的一致性和完整性至关重要。 主键(Primary Key) 主键是一个表中的一个或一组字段&#x…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
