HarmonyOS4.0系列——07、自定义组件的生命周期、路由以及路由传参

自定义组件的生命周期

允许在生命周期函数中使用 Promise 和异步回调函数,比如网络资源获取,定时器设置等;

页面生命周期

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

onPageShow

页面加载时触发,页面每次显示时触发一次,包括路由过程、应用进入前台等场景。

onPageHide

从第一个页面跳转第二个页面后,第一个页面会最为后台,触发onPageHide生命周期

页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景。
下面是代码尝试

LifeCycle页面

import router from '@ohos.router'
@Entry
@Component
struct LifeCycle {@State message: string = '第一页'build() {Row() {Column() {Text(this.message).fontSize(25)Divider()Button('Next').onClick(() => {router.pushUrl({url:'pages/LifeCycle2'})}).fontSize(25)}.width('100%')}.height('100%')}onPageShow() {console.log('第一页:——onPageShow')}onPageHide() {console.log('第一页:——onPageHide')}onBackPress() {console.log('第一页:——onBackPress')}
}

LifeCycle2页面

import router from '@ohos.router'@Entry
@Component
struct LifeCycle2 {@State message: string = '第二页'build() {Row() {Column() {Text(this.message).fontSize(25)Divider()Button('Back').onClick((event: ClickEvent) => {router.back()}).fontSize(25)}.width('100%')}.height('100%')}onPageShow() {console.log('第二页:——onPageShow')}onPageHide() {console.log('第二页:——onPageHide')}onBackPress() {console.log('第二页:——onBackPress')}
}

效果的话大家可以从 DevEco Studio 左下角第四个日志中查看具体效果。

onBackPress

监听物理返回键,也就是手机上的回退,并不是路由连接router.back()的返回.
请添加图片描述

组件生命周期

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

aboutToAppear

在 build 构建之前渲染此生命周期。
详解:aboutToAppear 函数在创建自定义组件的新实例后,在执行其 build()函数之前执行。允许在 aboutToAppear 函数中改变状态变量,更改将在后续执行 build()函数中生效。

aboutToDisappear

组件销毁时触发,例如删除,移出等操作。
详解:aboutToDisappear 函数在自定义组件析构销毁之前执行。不允许在 aboutToDisappear 函数中改变状态变量,特别是@Link 变量的修改可能会导致应用程序行为不稳定。

例:

import router from '@ohos.router'@Entry
@Component
struct LifeCycle {@State message: string = '第一页'@State status: boolean = truebuild() {Row() {Column({ space: 20 }) {Text(this.message).fontSize(25)Divider()Button('Next').onClick(() => {router.pushUrl({ url: 'pages/LifeCycle2' })}).fontSize(25)Divider()if (this.status) {LifeCycle_son()}Button('上段文字显示/隐藏').onClick(() => {this.status = !this.status}).fontSize(25)}.width('100%')}.height('100%')}onPageShow() {console.log('第一页:——onPageShow')}onPageHide() {console.log('第一页:——onPageHide')}onBackPress() {console.log('第一页:——onBackPress')}
}@Component
struct LifeCycle_son {build() {Column() {Text('我是第一页的一个子组件').fontSize(30)}}// aboutToAppear函数在创建自定义组件的新实例后,在执行其build()函数之前执行。aboutToAppear() {console.log('我是第一页的一个子组件:aboutToAppear')}// aboutToDisappear函数在自定义组件析构销毁之前执行。aboutToDisappear() {console.log('我是第一页的一个子组件:aboutToDisappear')}
}

请添加图片描述

点击两次上段文字显示/隐藏按钮
依次出现上述的生命周期为:
请添加图片描述

可以看到,如果将组件删除的话就可以触发aboutTodisappear生命周期
再次点击显示时触发aboutToAppear生命周期。当然默认的话会先触发aboutToAppear,因为他默认组件LifeCycle_son是先存在的。

页面路由

路由跳转

router.pushUrl({ url: "路径" });

路由传参

router.pushUrl({url: "/pages/LifeCycle2",params: {id: 1,username: "Southern Wind",age: 18,},
});

接受参数username,在LifeCycle2页面router.getParams()

let username = router.getParams()['username'] as string

效果:
请添加图片描述

应用之间传参

公共数据共享创建参数

// 应用程序数据共享
AppStorage.Set('message','我要玩原神')
AppStorage.SetOrCreate('message2','Southern Wind')

其他页面获取此数据

let name:string = AppStorage.Get('message2')

注意:此Api需要用真机进行调试,模拟器没有效果的!!

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

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

相关文章

2023年上半年网络工程师真题(3/3)

41.某主机无法上网,查看本地连接后,发现只有发送包没有接收包,故障原因可能是(C)。 A.网线没有插好 B.DNS配置错误 C.IP地址配置错误 D.TCP/IP协议故障 如果网线没有插好,就没有发送包没有接收包;DNS配…

UI设计中的插画运用优势(上)

1. 插画是设计的原创性和艺术性的基础 无论是印刷品、品牌设计还是UI界面,更加风格化的插画能够将不同的风格和创意加入其中,在激烈的竞争中更容易因此脱颖而出。留下用户才有转化。 2. 插画是视觉触发器,瞬间传达大量信息 我们常说「一图胜千…

Skydel 23.8新版本发布!GNSS模拟器完成首项实地路测项目

奥本大学自动驾驶团队运用GNSS模拟器完成首项实地路测项目 奥本大学与最近与阿拉巴马州伯明翰的巴伯赛车运动公园合作进行道路测试,该车在没有任何人工干预的情况下成功绕赛道完成了一圈,这也是印地自动驾驶挑战赛中车辆首次在美国专业赛道上完成一圈。…

unity-shader笔记OLD

shader shader在面板中的位置相关代码代码切换shader shader在面板中的位置 选中物体属性面板中 相关代码 代码切换shader 挂载到怪物上的shader名字统一叫body,然后获取上面的SkinnedMeshRender SkinnedMeshRender smr; //恢复到原来的shader …

智能驾驶新浪潮:SSD与UFS存储技术如何破浪前行?- SSD篇

随着汽车行业的不断发展,对存储的需求也在不断的变化中。早期阶段的汽车对存储的需求主要是收音机、播放器、导航仪等,有些还可以支持光盘和U盘的外接播放。中期阶段,也是当前主流的燃油车行车记录、多媒体、车联网的需求,对存储性…

大数据开发之Hadoop(优化新特征)

第 1 章:HDFS-故障排除 注意:采用三台服务器即可,恢复到Yarn开始的服务器快照。 1.1 集群安全模块 1、安全模式:文件系统只接收读数据请求,而不接收删除、修改等变更请求 2、进入安全模式场景 1)NameNod…

国考省考行测:语句排序2刷题

国考省考行测:语句排序2刷题 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能,附带行测和申论,而常规国考省考最重要的还是申论和行测,所以大家认真准备吧,我讲一起屡屡申论和行测的重要知识点…

软件是什么?前端,后端,数据库

软件是什么? 由于很多东西没有实际接触,很难理解,对于软件的定义也是各种各样。但是我还是不理解,软件开发中的前端,后端,数据库到底有什么关系呢! 这个问题足足困扰了三年半,练习时…

VUE 中的 v-for 和 v-if 是否可以共存

VUE 中的 v-for 和 v-if 是否可以共存 前言1、面试经2、正确回答3、总结总结: 前言 要成功,先发疯,头脑简单往前冲! 三金四银,金九银十,多学知识,也不能埋头苦干,要成功&#xff0c…

获取编译工具链默认的链接脚本

1、ld命令使用“–verbose”参数 命令:riscv64-linux-gnu-ld --verbose想使用自己的链接脚本,链接时使用“-T”指定

基于springboot+vue的高校心理教育辅导系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

【并发编程系列】putIfAbsent和getOrDefault用法

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

day20 最大的二叉树 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树

题目1:654 最大二叉树 题目链接:654 最大二叉树 题意 根据不重复的整数数组nums构建最大的二叉树 ,根节点是数组中的最大值,最大值左边的子数组构建左子树,最大值右边的子数组构建右子树 nums数组中最少含有1个元素…

Debian 11.8.0 安装图解

引导和开始安装 这里直接回车确认即可,选择图形化安装方式。 选择语言 这里要区分一下,当前选中的语言作为安装过程中安装器所使用的语言,这里我们选择中文简体。不过细心的同学可能发现,当你选择安装器语言之后,后续安…

社科院与美国杜兰大学金融管理硕士项目——在职读研的挑战与应对策略探秘

在繁忙的职场中,许多人渴望提升自己的学术背景和专业素养。社科院与美国杜兰大学金融管理硕士项目是专为金融职场人士打造的在职学习平台。然而,在职读研并非易事,这一兼具学术追求与职业发展的学习模式,对于许多人来说&#xff0…

Picturesocial | 开发实践:如何在15分钟内将应用容器化

在常见的软件架构体系中,容器无疑是一个技术热点。有些开发者在工作中熟练使用容器技术,有些可能刚刚开始容器之旅。 面对容器使用经验不同的各类开发者,我们希望通过这个系列文章,由浅入深地介绍如何使用容器技术来构建&#xf…

17.鸿蒙HarmonyOS App(JAVA)滑动选择器

每天进步一点点,成功在久不在速 滑动选择器 //设置文本样式 picker.setNormalTextFont(Font.DEFAULT_BOLD); picker.setNormalTextSize(40); picker.setNormalTextColor(new Color(Color.getIntColor("#FFA500"))); picker.setSelectedTextFont(Font.DEFAULT_BOLD)…

【Docker】Docker镜像结构及自定义镜像,镜像上传仓库使用

一、引言 Docker镜像是一个只读的Docker容器模板,含有启动Docker容器所需的文件系统结构及其内容,因此是启动一个Docker容器的基础。镜像的结构原理图大致分为四层:共享的内核层、基础镜像层、定制镜像层、可写容器层。 共享的内核层&#xf…

【GAMES101】Lecture 08 图形管线(实时渲染管线)与纹理映射

目录 图形管线 纹理映射 图形管线 给我一个三维模型,给我一个光照条件,我就能够得出渲染的结果,这些东西合起来就是Graphics Pipeline,图形管线,闫神愿称之为实时渲染管线,那下面这个流程图就是这个渲染…

redisson的延时队列机制简述

概述 业务中经常会遇到一些延迟执行的需求;通常想到的都是rabbitmq或者rocketmq的延迟消息; 但是系统中不一定集成了mq,但为了控制分布式下的并发,一般redis都是有集成的; redis的key过期监听那个时间不准确&#xff…