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

【鸿蒙学习笔记】页面和自定义组件生命周期

官方文档:页面和自定义组件生命周期

目录标题

  • [Q&A] 都谁有生命周期?
  • [Q&A] 什么是组件生命周期?
    • [Q&A] 什么是组件?
    • 组件生命周期
  • [Q&A] 什么是页面生命周期?
    • [Q&A] 什么是页面?
    • 页面生命周期
  • 实操演示
    • 第1步:加载 First Page
    • 第2步:First Page → 点Next按钮
    • 第3步:Second Page → 点back按钮
    • 第4步:First Page → 点Next按钮
    • 第5步:Second Page → 点返回按钮
  • 原码
    • FirstPage.ets
    • SecondPage.ets
    • main_pages.json

[Q&A] 都谁有生命周期?

1・组件生命周期
2・页面生命周期

[Q&A] 什么是组件生命周期?

[Q&A] 什么是组件?

1・ 自定义组件即@Component装饰的UI单元。个人理解: 用 @Component 声明组件
2.被@Component装饰的组件便可以调用组件的生命周期个人理解: 组件有自己的回调函数

组件生命周期

aboutToAppear:实例创建后,在执行其build()函数之前执行。
onDidBuild:组件build()函数执行完成之后回调该接口。
aboutToDisappear:实例销毁前。

[Q&A] 什么是页面生命周期?

[Q&A] 什么是页面?

1・页面即@Entry装饰应用的UI页面。可以由一个或者多个自定义组件组成。个人理解: UI页面包含多个UI单元,合理合法不需要解释
2・@Entry装饰的自定义组件为页面的入口组件,即页面的根节点。个人理解: 用 @Entry 声明页面
3・只有被@Entry装饰的组件才可以调用页面的生命周期个人理解: 页面有自己的回调函数

页面生命周期

onPageShow:页面显示时执行
onPageHide:页面隐藏时执行
onBackPress:点击返回键执行

实操演示

在这里插入图片描述

第1步:加载 First Page

app Log: FirstPage----------aboutToAppear1
app Log: FirstPage----------onPageShow1

第2步:First Page → 点Next按钮

app Log: FirstPage----------onPageHide1
app Log: FirstPage----------aboutToAppear2
app Log: FirstPage----------onPageShow2

第3步:Second Page → 点back按钮

app Log: FirstPage----------onPageHide2
app Log: FirstPage----------onPageShow1
app Log: FirstPage----------aboutToDisappear2

第4步:First Page → 点Next按钮

app Log: FirstPage----------onPageHide1
app Log: FirstPage----------aboutToAppear2
app Log: FirstPage----------onPageShow2

第5步:Second Page → 点返回按钮

app Log: FirstPage----------onBackPress2
app Log: FirstPage----------onPageHide2
app Log: FirstPage----------onPageShow1
app Log: FirstPage----------aboutToDisappear2

原码

FirstPage.ets

import { router } from '@kit.ArkUI'@Entry
@Component
struct FirstPage {@State message: string = 'First Page';build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)Button('Next').onClick(() => {router.pushUrl({url: "pages/SecondPage"})})}.width('100%')}.height('100%')}aboutToAppear(): void {console.log("FirstPage----------aboutToAppear1")}aboutToDisappear(): void {console.log("FirstPage----------aboutToDisappear1")}onPageShow(): void {console.log("FirstPage----------onPageShow1")}onPageHide(): void {console.log("FirstPage----------onPageHide1")}onBackPress(): boolean | void {console.log("FirstPage----------onBackPress1")}
}

SecondPage.ets

import { router } from '@kit.ArkUI'@Entry
@Component
struct SecondPage {@State message: string = 'Second Page';build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)Button("Back").onClick(() => {router.back()})}.width('100%')}.height('100%')}aboutToAppear(): void {console.log("FirstPage----------aboutToAppear2")}aboutToDisappear(): void {console.log("FirstPage----------aboutToDisappear2")}onPageShow(): void {console.log("FirstPage----------onPageShow2")}onPageHide(): void {console.log("FirstPage----------onPageHide2")}onBackPress(): boolean | void {console.log("FirstPage----------onBackPress2")}
}

main_pages.json

{"src": ["pages/Index","pages/FirstPage","pages/SecondPage"]
}

相关文章:

  • 使用Swoole开发高性能的Web爬虫
  • docker-compose搭建prometheus、grafana
  • React@16.x(43)路由v5.x(8)常见应用场景(5)- 滚动条复位
  • 0702_ARM6
  • 中国民间网络外交组织(CCND)
  • 【C++进阶学习】第五弹——二叉搜索树——二叉树进阶及set和map的铺垫
  • (PADS学习)第二章:原理图绘制 第一部分
  • [开源软件] 支持链接汇总
  • VS2019中解决方案里的所有项目都是 <不同选项> 的解决方案
  • 重温react-06(初识函数组件和快速生成格式的插件使用方式)
  • AcWing 1256:扩展二叉树
  • C++ ariac2 Windows库编译
  • 【Node-RED 4.0.2】4.0版本新增特性(官方版)
  • 智能洗车管理系统设计
  • 安装llama_factory
  • Angular Elements 及其运作原理
  • canvas 绘制双线技巧
  • CSS盒模型深入
  • Druid 在有赞的实践
  • node-glob通配符
  • React组件设计模式(一)
  • Vim 折腾记
  • 创建一个Struts2项目maven 方式
  • 简单基于spring的redis配置(单机和集群模式)
  • 三栏布局总结
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 使用 Docker 部署 Spring Boot项目
  • 思维导图—你不知道的JavaScript中卷
  • python最赚钱的4个方向,你最心动的是哪个?
  • #if和#ifdef区别
  • #pragma multi_compile #pragma shader_feature
  • $$$$GB2312-80区位编码表$$$$
  • $nextTick的使用场景介绍
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (初研) Sentence-embedding fine-tune notebook
  • (分布式缓存)Redis分片集群
  • (七)c52学习之旅-中断
  • (算法)Travel Information Center
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .CSS-hover 的解释
  • .gitignore文件_Git:.gitignore
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .NET单元测试
  • /boot 内存空间不够
  • @ResponseBody
  • [ vulhub漏洞复现篇 ] Celery <4.0 Redis未授权访问+Pickle反序列化利用
  • [04] Android逐帧动画(一)
  • [20140403]查询是否产生日志