用户名
Email
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
帖子
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
软件与程序人生
›
移动端开发
›
鸿蒙
›
【HarmonyOS NEXT 】应用开发:ArkTS页面和自定义组件生 ...
【HarmonyOS NEXT 】应用开发:ArkTS页面和自定义组件生命周期 ...
西河刘卡车医
论坛元老
|
2024-10-24 14:53:54
|
显示全部楼层
|
阅读模式
楼主
主题
1809
|
帖子
1809
|
积分
5427
SDK:5.0.0
DevEco Studio:5.0.3
Node.js:18.20.1
一、基础概念
自定义组件:@Component装饰的UI单位。
页面:@Entry装饰的自定义组件为页面的入口组件,即页面的根节点,一个页面有且仅能有一个@Entry。只有被@Entry装饰的组件才可以调用页面的生命周期。
应用的UI页面可以由一个或者多个自定义组件组成。
二、生命周期示意图及介绍
1、页面生命周期(即被@Entry装饰的组件生命周期),生命周期接口:
onPageShow:页面每次显示时触发一次,包括路由过程、应用进入前台等场景。
onPageHide:页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景。
onBackPress:当用户点击返回按钮时触发。
2、组件生命周期(即一样平常用@Component装饰的自定义组件的生命周期),生命周期接口:
aboutToAppear:组件即将出现时回调该接口,详细时机为在创建自定义组件的新实例后,在实行其build()函数之前实行。
aboutToDisappear:在自定义组件析构销毁之前实行。不答应在aboutToDisappear函数中改变状态变量,特别是@Link变量的修改可能会导致应用步调行为不稳定。
三、生命周期调用时机示例
1、干系代码
// Index.ets
import router from '@ohos.router';
/**
* 页面的根节点,一个页面仅有一个@Entry
* */
@Entry
@Component
struct MyComponent {
@State showChild: boolean = true;
// 组件生命周期、组件生命周期
aboutToAppear() {
console.info('MyComponent aboutToAppear');
}
// 组件生命周期、组件生命周期
aboutToDisappear() {
console.info('MyComponent aboutToDisappear');
}
// *** 只有被@Entry装饰的组件才可以调用页面的生命周期 *** START ***//
// 页面每次显示时触发一次
onPageShow() {
console.info('Index onPageShow,页面每次显示时触发一次');
}
// 页面每次隐藏时触发一次
onPageHide() {
console.info('Index onPageHide,页面每次隐藏时触发一次');
}
// 当用户点击返回按钮时触发
onBackPress() {
console.info('Index onBackPress,当用户点击返回按钮时触发');
}
// *** 只有被@Entry装饰的组件才可以调用页面的生命周期 *** END ***//
build() {
Column() {
// this.showChild为true,创建Child子组件,执行Child aboutToAppear
if (this.showChild) {
Child()
}
// this.showChild为false,删除Child子组件,执行Child aboutToDisappear
Button('delete Child').onClick(() => {
this.showChild = false;
})
// push到Page2页面,执行onPageHide
Button('push to next page')
.onClick(() => {
router.pushUrl({ url: 'pages/Page2' });
})
}
}
}
/**
* 自定义组件,不能增加@Entry修饰
* */
@Component
struct Child {
@State title: string = 'Hello World';
// 组件生命周期、组件即将出现时回调该接口
aboutToAppear() {
console.info('[lifeCycle] Child aboutToAppear,组件即将出现时回调该接口')
}
// 组件生命周期、在组件销毁之前执行
aboutToDisappear() {
console.info('[lifeCycle] Child aboutToDisappear,在组件销毁之前执行')
}
build() {
Text(this.title).fontSize(50).onClick(() => {
this.title = 'Hello ArkUI';
})
}
}
复制代码
2、实行结果
3、代码实行过程详解
该页面包含两个自定义组件,一个是被@Entry装饰的MyComponent,也是页面的入口组件,即页面的根节点;一个是Child,是MyComponent的子组件。只有@Entry装饰的节点才可以使页面级别的生命周期方法生效,以是MyComponent中声明确当前Index页面的页面生命周期函数。MyComponent和其子组件Child也同时也声明确组件的生命周期函数。
应用冷启动的初始化流程为:MyComponent aboutToAppear --> MyComponent build --> Child aboutToAppear --> Child build --> Child build实行完毕 --> MyComponent build实行完毕 --> Index onPageShow。
点击“delete Child”,if绑定的this.showChild变成false,删除Child组件,会实行Child aboutToDisappear方法。
点击“push to next page”,调用router.pushUrl接口,跳转到别的一个页面,当前Index页面隐藏,实行页面生命周期Index onPageHide。此处调用的是router.pushUrl接口,Index页面被隐藏,并没有销毁,以是只调用onPageHide。跳转到新页面后,实行初始化新页面的生命周期的流程。
如果调用的是router.replaceUrl,则当前Index页面被销毁,实行的生命周期流程将变为:Index onPageHide --> MyComponent aboutToDisappear --> Child aboutToDisappear。上文已经提到,组件的销毁是从组件树上直接摘下子树,以是先调用父组件的aboutToDisappear,再调用子组件的aboutToDisappear,然后实行初始化新页面的生命周期流程。
点击返回按钮,触发页面生命周期Index onBackPress,且触发返回一个页面后会导致当前Index页面被销毁。
最小化应用或者应用进入后台,触发Index onPageHide。当前Index页面没有被销毁,以是并不会实行组件的aboutToDisappear。应用回到前台,实行Index onPageShow。
退出应用,实行Index onPageHide --> MyComponent aboutToDisappear --> Child aboutToDisappear。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
西河刘卡车医
论坛元老
这个人很懒什么都没写!
楼主热帖
【容器~原始真解】Docker —— 容器的 ...
轻量级CI/CD发布部署环境搭建及使用_06 ...
工行、建行、农行的 IT 架构是什么样的 ...
全双工与半双工技术剖析
PHP判断远程文件是否存在的四种方法 ...
超融合一体机上新,打通信创落地的“顶 ...
Spring--循环依赖的原理(四)--为什么用 ...
继承和多重继承
一文了解华为FusionInsight MRS HBase ...
MySQL高可用架构搭建实战
标签云
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
移动端开发
DevOps与敏捷开发
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表