赞
踩
SDK:5.0.0
DevEco Studio:5.0.3
Node.js:18.20.1
1、页面生命周期(即被@Entry装饰的组件生命周期),生命周期接口:
2、组件生命周期(即一般用@Component装饰的自定义组件的生命周期),生命周期接口:
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也同时也声明了组件的生命周期函数。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。