当前位置: 首页 > news >正文

【鸿蒙HarmonyOS NEXT】页面和自定义组件生命周期

【鸿蒙HarmonyOS NEXT】页面和自定义组件生命周期

  • 一、环境说明
  • 二、页面和自定义组件生命周期
  • 三、示例代码加以说明
  • 四、小结

一、环境说明

  1. DevEco Studio 版本:
    在这里插入图片描述

  2. API版本:以12为主
    在这里插入图片描述

二、页面和自定义组件生命周期

需要明确几个概念:

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

    • onPageShow:页面每次显示时触发。
    • onPageHide:页面每次隐藏时触发一次。
    • onBackPress:当用户点击返回按钮时触发。
  2. 自定义组件Component
    @Component装饰的UI单元,可以组合多个系统组件实现UI的复用。
    组件生命周期,即一般用@Component装饰的自定义组件的生命周期,提供以下生命周期接口:

    • aboutToAppear:组件即将出现时回调该接口,具体时机为在创建自定义组件的新实例后,在执行其build()函数之前执行。
    • aboutToDisappear:在自定义组件即将析构销毁时执行。
  3. 当被@Entry和@Component装饰器同时装饰的页面的生命周期流程如下图所示
    在这里插入图片描述
    需要注意的是,部分生命周期回调函数仅对@Entry修饰的自定义组件生效,它们分别是:onPageShow、onPageHide、onBackPress。

三、示例代码加以说明

  1. 新建项目取名为pagelifecyc的工程,当工程被创建成功后,默认只有一个Index.ets页面。
  2. 新建一个目录,取名为view。
  3. 在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)}})}}}
    }
    
  4. 新建一个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)}
    }
    
  5. 在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)}
    }
    
  6. 保持在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…...

大话软工笔记—需求分析概述

需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"&#xff0…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...

命令行关闭Windows防火墙

命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)​方法二:CMD命令…...

【java】【服务器】线程上下文丢失 是指什么

目录 ■前言 ■正文开始 线程上下文的核心组成部分 为什么会出现上下文丢失&#xff1f; 直观示例说明 为什么上下文如此重要&#xff1f; 解决上下文丢失的关键 总结 ■如果我想在servlet中使用线程&#xff0c;代码应该如何实现 推荐方案&#xff1a;使用 ManagedE…...

大模型智能体核心技术:CoT与ReAct深度解析

**导读&#xff1a;**在当今AI技术快速发展的背景下&#xff0c;大模型的推理能力和可解释性成为业界关注的焦点。本文深入解析了两项核心技术&#xff1a;CoT&#xff08;思维链&#xff09;和ReAct&#xff08;推理与行动&#xff09;&#xff0c;这两种方法正在重新定义大模…...

从0开始一篇文章学习Nginx

Nginx服务 HTTP介绍 ## HTTP协议是Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;的缩写,是用于从万维网&#xff08;WWW:World Wide Web &#xff09;服务器传输超文本到本地浏览器的传送协议。 ## HTTP工作在 TCP/IP协议体系中的TCP协议上&#…...