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

第八节HarmonyOS @Component自定义组件的生命周期

在开始之前,我们先明确自定义组件和页面的关系:

1、自定义组件:@Component装饰的UI单元,可以组合多个系统组件实现UI的复用。

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

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

onPageShow:页面每次显示时触发。

onPageHide:页面每次隐藏时触发一次。

onBackPress:当用户点击返回按钮时触发。

组件生命周期,即一般用@Component装饰的自定义组件的生命周期,提供以下生命周期接口:

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

aboutToDisappear:在自定义组件即将析构销毁时执行。

有@Entity修饰的组件,既有页面的生命周期也有组件的生命周期:

// Index.ets
import router from '@ohos.router';@Entry
@Component
struct LifeCycleComponent {@State showChild: boolean = true;// 只有被 @Entry 装饰的组件才可以调用页面的生命周期onPageShow() {console.info('Index onPageShow');}// 只有被 @Entry 装饰的组件才可以调用页面的生命周期onPageHide() {console.info('Index onPageHide');}// 只有被 @Entry 装饰的组件才可以调用页面的生命周期onBackPress() {console.info('Index onBackPress');}// 组件生命周期aboutToAppear() {console.info('LifeCycleComponent aboutToAppear');}// 组件生命周期aboutToDisappear() {console.info('LifeCycleComponent aboutToDisappear');}build() {Column() {// this.showChild 为 true,创建 Child 子组件,执行 Child aboutToAppearif (this.showChild) {Child()}// this.showChild 为 false,删除 Child 子组件,执行 Child aboutToDisappearButton('create or delete Child').onClick(() => {this.showChild = false;})// push 到 Page2 页面,执行 onPageHideButton('push to next page').onClick(() => {router.pushUrl({ url: 'pages/Page2' });})}}
}

无@Entity修饰的组件,只有组件的生命周期:

@Component
struct Child {@State title: string = 'Hello World';// 组件生命周期aboutToDisappear() {console.info('[lifeCycle] Child aboutToDisappear')}// 组件生命周期aboutToAppear() {console.info('[lifeCycle] Child aboutToAppear')}build() {Text(this.title).fontSize(50).onClick(() => {this.title = 'Hello ArkUI';})}
}

总结:

第一个页面Index页面有@Entity修饰,第二个页面Second中无@Entity修饰

1、首次打开应用,加载的是Index页,生命周期是:

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

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

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

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

http://www.lryc.cn/news/251883.html

相关文章:

  • 【Openstack Train安装】五、Memcached/Etcd安装
  • 29 kafka动态配置
  • JIRA部分数据库结构
  • RK3568平台开发系列讲解(Linux系统篇) dtb 到 device_node 的转化
  • 屏幕的刷新率和分辨率
  • 面试官:请说说JS中的防抖和节流
  • [足式机器人]Part4 南科大高等机器人控制课 Ch00 课程简介
  • SSM项目实战-登录验证成功并路由到首页面,Vue3+Vite+Axios+Element-Plus技术
  • Python----网络爬虫
  • 【微信小程序】上传头像 微信小程序内接小程序客服
  • 【c++随笔15】c++常用第三方库
  • 数据结构 | 查漏补缺之ASL、
  • 泊车功能专题介绍 ———— 汽车全景影像监测系统性能要求及试验方法(国标未公布)
  • 【Linux】第二十六站:软硬链接
  • 开源播放器GSYVideoPlayer + ViewPager2 源码解析
  • 重启路由器可以解决N多问题?
  • Python WebSocket 客户端教程
  • 洛谷 P2984 [USACO10FEB] Chocolate Giving S
  • 【专题】【数列极限】
  • oracle基础系统学习文章目录
  • 长度最小的子数组(Java详解)
  • 计算机组成学习-数据的表示和运算总结
  • 目标检测YOLO系列从入门到精通技术详解100篇-【目标检测】机器视觉(基础篇)(八)
  • 【4】基于多设计模式下的同步异步日志系统-框架设计
  • Jupyter Markdown 插入图片
  • web自动化 -- pyppeteer
  • Java 数组另类用法(字符来当数组下标使用)
  • error转string
  • Android监听用户的截屏、投屏、录屏行为
  • MATLAB算法实战应用案例精讲-【路径规划】 图搜索算法