ArkTS 页面和自定义组件的生命周期

自定义组件:是使用@Component 装饰的 UI 单元,可以使用多个系统组件来封装可以复用的组件。

页面:就是应用的 UI 页面,可以由一个或者多个自定义组件构成,页面则是使用@Entry 装饰的自定义组件作为页面的入口组件,也就是页面的根节点。一个页面只能有一个@Entry 装饰器,只有被@Entry 装饰的组件,才可以调用页面的生命周期。

页面的生命周期,有这几个:

  • onPageShow:页面每次显示的时候触发一次。包括通过路由进入页面和应用进入前台等场景。
  • onPageHide:页面隐藏的时候触发一次,包括路由切换和应用进入后台等场景。
  • onBackPress:用户点击返回按钮的时候触发。

组件的生命周期函数:

  • aboutToAppear:组件即将出现的时候调用,在构建自定义组件的实例以后,在 build 函数之前执行。
  • onDidBuild:组件的 build 函数执行完成之后调用,不推荐在 onDidBuild 函数中更改状态变量、使用 animateTo 这些功能,否则会导致 UI 渲染不稳定。
  • aboutToDisappear:在自定义组件析构销毁之前执行,不允许在 aboutToDisappear 函数内修改状态变量,尤其是@Link 变量的修改,可能会导致应用程序行为不稳定。

自定义组件的渲染流程:

  1. 自定义组件的实例由 ArkUI 框架创建
  2. 初始化自定义组件内的成员变量
  3. 如果组件组件内定义了 aboutToAppear,那么就执行它
  4. 在首次渲染的时候,执行 build 方法 渲染系统组件,如果子组件是自定义组件,那就先创建自定义组件的实例。首次渲染的时候,ArkUI 框架会记录状态变量和组件的映射关系,在状态变量发生改变的时候,就触发对应的组件刷新。
  5. 如果组件内定义了 onDidBuild,那么就会执行它。

组件被删除的时候:

  1. 在删除组件之前,将调用其aboutToDisappear生命周期函数,标记着该节点将要被销毁。ArkUI的节点删除机制是:后端节点直接从组件树上摘下,后端节点被销毁,对前端节点解引用,前端节点已经没有引用时,将被JS虚拟机垃圾回收。
  2. 自定义组件和它的变量将被删除,如果其有同步的变量,比如@Link、@Prop、@StorageLink,将从同步源上取消注册。

完整的代码如下:

import CommonConstants from "../common/constants/Contants";
import { TODO_DATA } from "../common/data/SouresData"@Entry
@Component
struct ToDoList {@State title: string = '';onPageShow() {console.info('Index onPageShow');}onPageHide() {console.info('Index onPageHide');}onBackPress() {console.info('Index onBackPress');return true // 返回true表示页面自己处理返回逻辑,不进行页面路由;返回false表示使用默认的路由返回逻辑,不设置返回值按照false处理}aboutToAppear() {console.info('MyComponent aboutToAppear');}onDidBuild() {console.info('MyComponent onDidBuild');}aboutToDisappear() {console.info('MyComponent aboutToDisappear');}build() {Column() {Text(CommonConstants.TODO_TITLE).id('ToDoListHelloWorld').fontSize(30).fontWeight(FontWeight.Bold).alignRules({center: { anchor: '__container__', align: VerticalAlign.Center },middle: { anchor: '__container__', align: HorizontalAlign.Center }}).margin({bottom: 20})ForEach(TODO_DATA, (item: string) => {ToDoItem({ contents: item })}, (item: string) => item)}.margin({left: 10,top: 10})}
}/*** 自定义的 Item 组件*/
@Preview
@Component
struct ToDoItem {private contents?: stringbuild() {Row() {Image($r("app.media.startIcon")).width(50).height(50).margin({right:50})Text(this.contents).fontSize(20).margin({top: 15})}.margin({bottom:30})}
}

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

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

相关文章

SprinBoot+Vue健康管管理微信小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平…

LabVIEW水泵机组监控系统

介绍了一种基于LabVIEW的水泵机组智能监控系统。该系统结合先进的传感器和数据采集技术,实时监控水泵机组的运行状态,有效预防故障,提高运行效率。通过LabVIEW平台的集成开发环境,系统实现了高效的数据处理和友好的用户界面。 项…

SpringCloud-02 Consul服务注册与发现

Consul是一种用于服务发现、配置和分布式协调的开源工具。Consul提供了以下主要功能: 1.服务发现:Consul允许开发人员在微服务架构中注册和发现服务。它可以自动检测新添加的服务并为它们分配唯一的网络地址。 2.健康检查:Consul可以定期检查…

一篇文档教会你从JavaScript语法走进DOM,让你的网页动起来

目录 JavaScript与WebAPI WebAPI简介 DOM 获取元素 事件 事件三要素 常见的事件类型 获取修改元素属性 基本介绍和使用 案例1:实现文本框内数字计数 案例2:实现“全部选中”按钮触发时相应的效果(worth trying for a freshman&…

【为项目做准备】Linux操作系统day2

这两天学校的事情总压着,day2拖了好几天..day2内容是进程数据结构 进程数据结构信号处理任务状态进程调度运行统计信息进程亲缘关系进程权限用户和组标识符(IDs)linux capabilities 内存管理文件与文件系统用户态与内核态用户态与内核态的转换函数调用栈内核栈和tas…

turbovnc 服务端、客户端安装

turbovnc 可以方便地远程登录带界面的linux系统,比如xbuntu、kali等;远程windows11系统,经过亲身测试体验,感觉还是不如windows自带的rdp服务(mstsc命令连接)好用。 一、安装客户端 下载最新版本的客户端…

力扣面试经典算法150题:接雨水

接雨水 今天的题目是力扣面试经典算法150题中的困难难度数组题目:分发糖果。 题目链接:https://leetcode.cn/problems/trapping-rain-water/description/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述 给定 n 个非负整数表示每个宽度为…

常见的管理系统简称

1. ERP (Enterprise Resource Planning) - 企业资源计划 定义: ERP是一种集成了企业各个业务模块(如财务、人力资源、生产、供应链、销售等)的管理系统,旨在通过统一的平台来优化企业资源的配置和使用。 功能和特点: 集成性: ERP系统将企业…

python库pdf转word

要在 Python 中将 PDF 文件转换为 Word 文档(.doc 或 .docx 格式),您可以使用几个不同的库来实现这一目标。这里介绍几种常用的库及其使用方法: 1. 使用 pdf2docx pdf2docx 是一个流行的 Python 库,用于将 PDF 文件转换…

【Rust】006-Rust 枚举与`match`、`if let`、`let else`

【Rust】006-Rust 枚举与match、if let、let else 文章目录 【Rust】006-Rust 枚举与match、if let、let else一、简介二、使用场景三、基本使用1、定义枚举2、使用枚举 四、功能详解1、带数据的枚举2、使用match进行模式匹配3、使用if let简化特定变体的处理4、使用let else处…

0904作业+思维导图

一、作业 &#xff08;将昨天的作业修改为标准模板类的&#xff09; 1、代码 #include <iostream> #include <stack> using namespace std; //队列模板类 template<typename T> class Queue { private:int max; //队列最大容量int num; //队列内…

pikachu文件包含漏洞靶场通关攻略

本地文件包含 首先&#xff0c;在靶场根目录下创建一个php文件&#xff0c;内容是phpinfo(); 其次&#xff0c;上传一个任意球星图片&#xff0c;会跳转到带有filename参数的php文件下 然后&#xff0c;将filename的参数改为可以访问到我们创建的php文件的地址 ../../../../…

【计算机】1GB与1Gb与MB的关系

背景 看到个规格书列的芯片规格参数有错误&#xff0c;给对方指出来了下&#xff0c;并做了下科普。做下记录。 关系 1 Gb&#xff08;Gigabit&#xff09;和1 GB&#xff08;Gigabyte&#xff09;之间的区别主要在于“b”和“B”的含义。通常&#xff1a; 1 Gb (Gigabit) 中…

TCP协议多进程多线程并发服务器

TCP多进程多线程并发服务器 1.多进程并发服务器 #include <myhead.h>#define SERPORT 6666 #define SERIP "192.168.0.136" #define BLACKLOG 10void hande(int a) {if(aSIGCHLD){while(waitpid(-1,NULL,WNOHANG)!-1);//回收僵尸进程} }int main(int argc, c…

【Grafana】Prometheus结合Grafana打造智能监控可视化平台

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Oracle 客户端 PL/SQL Developer 15.0.4 安装与使用

目录 官网下载与安装 切换中文与注册 连接Oracle数据库 tnsnames.ora 文件使用 Oracle 客户端 PL/SQL Developer 12.0.7 安装、数据导出、Oracle 执行/解释计划、for update。 官网下载与安装 1、官网&#xff1a;https://www.allroundautomations.com/products/pl-sql-d…

Redis的配置和启动+Redis Insight连接

一、安装 Redis的安装&#xff1a;从镜像站下载&#xff1a;索引 redis-local (huaweicloud.com)&#xff0c;然后将其传到Linux虚拟机中进行解压&#xff0c;解压之后需要下载gcc&#xff0c;因为Redis底层是用c写的&#xff0c;所以要编译一下生成redis文件&#xff0c;然后…

vite项目配置本地开发使用https访问

在Vite项目中启用HTTPS以安全地使用navigator.mediaDevices.getUserMedia() 引言 在现代Web开发中&#xff0c;保护用户隐私和数据安全是至关重要的。特别是在涉及到媒体捕获功能&#xff0c;如使用用户的摄像头或麦克风时&#xff0c;Web应用需要遵循严格的安全准则。naviga…

反向迭代器:reverse_iterator的实现

目录 前言 特点 注意事项 实现 构造函数 功能函数 在list与vector中的使用 vector list 前言 反向迭代器是一种在序列容器的末尾开始&#xff0c;并向前移动至序列开始处的迭代器。在C中&#xff0c;反向迭代器由标准库中的容器类提供&#xff0c;比如vector、list、d…

Ansible剧本编写指南:从简单任务到复杂自动化的实现

Ansible剧本编写指南&#xff1a;从简单任务到复杂自动化的实现 Ansible 是一个流行的开源自动化工具&#xff0c;被广泛用于配置管理、应用部署、任务自动化以及 IT 基础设施的编排。它的核心是简单且易于学习的 YAML 格式&#xff0c;使用户能够编写可重用、可维护的剧本&am…