【HarmonyOS】HarmonyOS NEXT学习日记:七、页面与组件的生命周期

news2024/11/18 11:27:26

【HarmonyOS】HarmonyOS NEXT学习日记:七、页面与组件的生命周期

页面和组件

  • 组件:用@Component装饰的代码称为自定义组件
  • 页面:@Entry装饰的组件即页面的根节点

组件生命周期

aboutToAppear:在创建自定义组件的新实例后,在执行其build()函数之前执行。允许在aboutToAppear函数中改变状态变量,更改将在后续执行build()函数中生效。
aboutToDisappear:在自定义组件析构销毁之前执行。不允许在aboutToDisappear函数中改变状态变量,特别是@Link变量的修改可能会导致应用程序行为不稳定。

页面生命周期

onPageShow:页面每次显示时触发一次,包括路由过程、应用进入前台等场景,仅@Entry装饰的自定义组件生效。
onPageHide:页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景,仅@Entry装饰的自定义组件生效。
onBackPress:当用户点击返回按钮时触发,仅@Entry装饰的自定义组件生效。返回true表示页面自己处理返回逻辑,不进行页面路由;返回false表示使用默认的路由返回逻辑,不设置返回值按照false处理。

代码示例

// Index.ets
import text from '@ohos.graphics.text'
import { router } from '@kit.ArkUI';
// 导入业务错误处理模块
import { BusinessError } from '@kit.BasicServicesKit';
@Builder function TextItem(text: string){
  Text(text)
    .fontSize(18)
    .fontColor(Color.Red)
    .backgroundColor('#ccc')
    .lineHeight(30)
    .width('100%')
    .textAlign(TextAlign.Center)
    .onClick(()=>{
      router.pushUrl({ url: 'pages/Second' }).then(() => { // 调用 router 模块的 pushUrl 方法跳转到第二页
        console.info('Succeeded in jumping to the second page.') // 在控制台输出跳转成功的日志信息
      }).catch((err: BusinessError) => { // 捕捉跳转过程中的错误
        console.error(`Failed to jump to the second page. Code is ${err.code}, message is ${err.message}`) // 在控制台输出跳转失败的错误信息,包括错误代码和错误信息
      })
    })
}
@Entry
@Component
struct Index {
  @State text: string = '111'
  @State showChildren: boolean = false;
  onPageShow() {
    this.text = 'onPageShow';
    console.info('IndexComponent onPageShow');
  }
  onPageHide() {
    this.text = 'onPageHide';
    console.info('IndexComponent onPageHide');
  }
  aboutToAppear(){
    this.text = '222'
    console.info('IndexComponent aboutToAppear');
  }
  aboutToDisappear(){
    console.info('IndexComponent aboutToDisappear');
  }
  build() {
    Column(){
      TextItem(this.text)
      if(this.showChildren){
        Child()
      }
      Button('修改children可见')
        .onClick(()=>{
          this.showChildren = !this.showChildren
        })
    }
  }
}
@Component
struct Child {
  @State title: string = 'Children';
  aboutToDisappear() {
    console.info('Child aboutToDisappear')
  }
  aboutToAppear() {
    console.info('Child aboutToAppear')
  }
  build() {
    Text(this.title).fontSize(50).onClick(() => {
      this.title = 'Children Changed';
    })
  }
}
页面初始化结束后

在这里插入图片描述

可以看到的是,我们定义text变量时赋值的‘111’在aboutToAppear中已经被修改为‘222’了,最终渲染出来的就是‘222’;
在这里插入图片描述

从日志中我们可以观察到,aboutToDisappear的执行时机在onPageShow之前。

然后我们点击跳转一下页面(离开页面)

在这里插入图片描述
日志如下在这里插入图片描述
组件并未被销毁,所以没有进入aboutToDisappear,但是因为离开了页面,所以进入了onPageHide。

当我们再次返回index页面(进入页面)

将会再次触发onPageShow,每一次页面显示时都会触发。
在这里插入图片描述

那么当我们点击按钮呢?(创建组件)

在这里插入图片描述

在这里插入图片描述
chidren子组件被渲染了出来,也出发了子组件的aboutToAppear。

再次点击按钮(销毁组件)在这里插入图片描述

在这里插入图片描述
将会触发子组件的销毁进入aboutToDisappear,同时页面上的子组件也消失不见。

总结

          页面显示
            |

ActivityA:onPageShow
------ 组件生命周期 ------
            |
      组件将要出现
            |

CustomComponent:aboutToAppear
            |
   组件的渲染和交互
            |
  用户按下返回按钮
            |

ActivityA:onBackPress
            |
    组件将要消失
            |

CustomComponent:aboutToDisappear
          |
       页面隐藏
            |

ActivityA:onPageHide

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1955596.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GPS定位系统(VUE框架)

源码下载:小宅博客网 博主之前写的《GPS定位系统(MVC框架)》版本,并没有做到前后端分离,不太适合多人协作开发,这边博主分享一个基于asp.net web api vue3的GPS定位系统框架,本框架继承了MVC框…

【Hot100】LeetCode—416. 分割等和子集

目录 题目1- 思路2- 实现⭐152. 乘积最大子数组——题解思路 3- ACM 实现 题目 原题连接:416. 分割等和子集 1- 思路 理解为背包问题 思路: 能否将均分的子集理解为一个背包,比如对于 [1,5,11,5],判断能否凑齐背包为 11 的容量…

【shell】shell循环的几种方式

Shell循环的方式 for循环 for 变量名 in 值列表 do命令1命令2... done值列表情形: 值铺开变量数组 值铺开 变量 数组 while循环 while 条件判断 do命令1命令2... done条件判断情形 计算比较读取文本 计算比较 读取文本 until循环 until 条件 do命令1命令2... …

Imagination 面向大学推出 RISC-V 课程

Imagination Technologies发布了针对本科教学的 RISC-V 计算机架构完整课程,帮助学生了解处理器架构的关键元素,包括知识产权 (IP) 内核、修改 RISC-V 内核及其微架构。 该课程名为“RVfpga:理解计算机架构”,包含教学材料和实践…

【C++指南】类和对象(下)

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《数据结构与算法》 期待您的关注

论文阅读_字节的语音生成模型_Seed-TTS

英文名称: Seed-TTS: A Family of High-Quality Versatile Speech Generation Models 中文名称: Seed-TTS:高质量多功能语音生成模型系列 链接: http://arxiv.org/abs/2406.02430v1 代码: https://github.com/BytedanceSpeech/seed-tts-eval (评测工具) 演示网站&am…

shell-awk命令详解

目录 一.概述 二.工作原理 三.工作流程 1.运行模式 2.运行流程 四.基本语法 1.命令格式 2.常用变量  五.变量类型 1.内建变量 2.内置变量 3.BEGIN END运算  4.awk高级用法 5.awk if语句 6.BEGIN END循环 一.概述 AWK是一种处理文本文件的语言,是一…

深入分析 Android ContentProvider (六)

文章目录 深入分析 Android ContentProvider (六)ContentProvider 的性能优化和实践案例(续)1. 性能优化技巧(续)1.6. 使用批量插入优化性能示例:批量插入实现 1.7. 使用 Projections 优化查询示例:使用 Pr…

Webpack 从入门到精通

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 一、Webpack 简介 二、Webpack 的核心概念 三、Webpack 的安装与配置 安装 Node.js 安装 Webpack 初始…

【Linux C | 网络编程】进程池退出的实现详解(五)

上一篇中讲解了在进程池文件传输的过程如何实现零拷贝,具体的方法包括使用mmap,sendfile,splice等等。 【Linux C | 网络编程】进程池零拷贝传输的实现详解(四) 这篇内容主要讲解进程池如何退出。 1.进程池的简单退…

超越基础功能:项目进度管理工具深度评测

国内外主流的10款项目进度管理网站对比:PingCode、Worktile、滴答清单(TickTick)、Todoist、NarTick、Teambition、Monday.com、Asana、ClickUp、Trello。 在选择合适的项目进度管理工具时,许多项目经理面临着如何找到既能满足团队…

二十二、作业

目录 1.求代码结果 2.求代码结果 3.使用指针打印数组内容 4.字符串逆序 5.计算求和 6.打印水仙花数 7.打印菱形 8.喝汽水问题 1.求代码结果 输出为00345 2.求代码结果 任何一个变量/表达式,都有2个属性,值属性和类型属性 int a 3;…

Python及Jupyter-Notebook安装

来源: “码农不会写诗”公众号 链接:Python及Jupyter-Notebook安装 文章目录 01 Python安装1.1 下载安装包1.2 双击安装包,开始安装1.3 选择安装配置1.4 选择需要安装的Optional Feature,点击Next1.5 选择需要安装的Advanced Feat…

matplotlib的科研绘图辅助

matplotlib的科研绘图辅助 趁着暑假,与和鲸科技合作了一个python绘图的教程,作为暑期夏令营的一小部分,主要内容是介绍如何使用matplotlib、pandas、seaborn和plotnine进行医学科研绘图,感兴趣的可以通过如下地址进行访问&#x…

Unity XR Interaction Toolkit设置或监听手柄按键事件(三)

提示:文章有错误的地方,还望诸位大神不吝指教! 文章目录 前言一、XRI Default Input Actions1.导入官方案例2.设置控制器绑定,如手柄、主/辅助按钮、操纵杆等1.要设置控制器绑定,如左右手 手柄、主/辅助按钮、操纵杆等…

添加sidecar容器并输出日志

添加一个sidecar容器(使用busybox 镜像)到已有的pod 11-factor-app中,确保sidecar容器能够输出/var/log/11-factor-app.log的信息,使用volume挂载/var/log目录,确保sidecar能访问11-factor-app.log 文件 # 准备工作 创建一个 pod 11-factor-appapiVersion: v1 kind: Pod metada…

【研路导航】保研英语面试高分攻略,助你一路过关斩将

面试攻略之 千锤百炼英语口语 写在前面 在保研面试中,英语口语往往是让许多同学感到头疼的一部分。如何在面试中展现出自信和流利的英语表达能力,是我们今天要探讨的主题。以下是一些有效的英语口语练习方法和常见题型解析,帮助你在保研面试…

GUI - Tkinter - MVC

【python】 property属性详解_python property-CSDN博客Tkinter MVC (pythontutorial.net)GUI架构演进之MVC(一) - frydsh - 博客园 (cnblogs.com)MVC 模式 | 菜鸟教程 (runoob.com)MVC 架构详解 (freecodecamp.org)Python之MVC - chenbiao - SegmentFau…

灵活数据流处理:NeuronEX 支持 JavaScript 自定义函数

随着数据要素逐渐成为帮助工业企业提升智能化水平的重要助力,如何灵活采集和处理工业数据,并满足用户定制化的数据需求,成为企业数字化建设的焦点之一。 NeuronEX 是一款专为工业场景设计的边缘网关软件,具备工业设备数据采集、工…

@JSONField(format = “yyyyMMddHH“)的作用和使用

JySellerItqrdDataDO对象中的字段为: private Date crdat; 2.数据库中的相应字段为: crdat datetime DEFAULT NULL COMMENT 创建时间,2. 打印出的结果为: “crdat”:“2024072718” 年月日时分秒 3. 可以调整format的格式 4. 这样就把Date类…