关于生命周期中的aboutToAppear和onPageShow的理解和应用

2025-05-27 07:33:59
123次阅读
0个评论

​ 在官网的“自定义组件的生命周期”这一章节当中介绍的生命周期中,有两个对开发我觉得很重要的生命周期,分别是aboutToAppear和onPageShow。

首先来看一下这两个生命周期的官方文档说明:

aboutToAppear:

aboutToAppear函数在创建自定义组件的新实例后,在执行其build()函数之前执行。允许在aboutToAppear函数中改变状态变量,更改将在后续执行build()函数中生效。实现自定义布局的自定义组件的aboutToAppear生命周期在布局过程中触发。

onPageShow:

页面每次显示时触发一次,包括路由过程、应用进入前台等场景,仅@Entry装饰的自定义组件作为页面时生效。

从两者相同的角度来说,其都是在自定义组件显示后,主动去触发的生命周期,在这两个生命周期里可以写一些数据获取啊等相关的操作(比如通过网络从后端获取当前页面的一些数据)

主要的区别在于:

首先,aboutToAppear是适用于所有自定义组件的,包括通过@Entry装饰的,即我们通俗一点理解的页面,但是onPageShow是只针对@Entry装饰的页面的。那么我们一般在常规的开发方案中,一级页面是通过一个@Entry装饰的页面,通过tab来加载多个自定义子组件实现的,所以在这种背景下,只有主页面可以用onPageShow,而tab里加载的子组件只能用aboutToAppear

其次,当我们打开A页面时(@Entry装饰的),会先执行aboutToAppear,再执行onPageShow,然后我们从A页面跳转到B页面(注意,是跳转,不是替换),再从B页面返回到A页面的时候,只会执行onPageShow,而不会执行aboutToAppear。在实践中,例如从列表页跳转到新增数据页,如果有新增数据则刷新列表页数据的话,最简单的方式(不考虑性能的情况下),就是把列表页的获取数据代码放在onPageShow里

最后,对于两者的加载顺序上,除了第二点中提到的先aboutToAppear再onPageShow以外,对于build()在两者之间的顺序问题,文档中有图片如下:

微信截图_20250526231838.png

如图可知,是先aboutToAppear然后build,再onPageShow,所以,如果有一些耗时的操作,不要写在aboutToAppear里通过同步去写,否则会阻塞页面的渲染,即影响冷启动时间。但是这个问题在onPageShow当中就不用去考虑,因为执行的时候已经build完成了。

所以,总结的来说,在aboutToAppear中写的代码,要通过异步去实现耗时的操作,而onPageShow里面的代码要考虑到因为页面跳转返回所导致的反复触发的问题

收藏00

登录 后评论。没有帐号? 注册 一个。