鸿蒙开发2-3 页面和组件的生命周期

目录

简介

1.页面和生命周期接口

2.页面生命周期解析

3.组件生命周期解析

4.总结

简介

        本系列是windows系统下、采用ArkTS语言、ArkUI框架、deveco studio编译器学习纯鸿蒙软件研发,采用API version 9进行。本小节主要了解鸿蒙开发的页面和组件的生命周期。纯小白,一步步学习,记录一下过程便于查询。

1.页面和生命周期接口

        页面生命周期,即被@Entry装饰的组件生命周期,具有以下生命周期接口:

  • onPageShow:页面每次显示时触发
  • onPageHide:页面每次隐藏时触发
  • onBackPress:当用户点击返回按钮时触发(手机下方自带导航条的返回,不是路由返回)
  • aboutToAppear:组件即将出现时回调该接口,具体具体时机为在创建自定义组件的新实例后,在执行其build()函数之前执行
  • aboutToDisappear:在自定义组件即将析构销毁时执行。

2.页面生命周期解析

        页面1测试代码:

import router from '@ohos.router'
@Entry
@Component
struct LiveForOne {
  @State message:string='page1'
  build() {
    Row() {
      Column() {
        Text(this.message).fontSize(30).fontColor('#00F00f')
      }.width('100%')
    }.height('100%')
    .onClick(() => {
      router.pushUrl({url:'pages/LiveForTwo'})
    })
  }
  onPageShow(){//页面显示时触发
    console.log('page1……onPageshow')
  }
  onPageHide(){//页面每次被隐藏时触发一次
    console.log('page1……onPageHide')
  }
  onBackPress(){//点击页面下方手机返回键
    console.log('page1……onBackPress')
  }
}

        页面2测试代码:

import router from '@ohos.router'
@Entry
@Component
struct LiveForTwo {
  @State message:string='page2'
  build() {
    Row() {
      Column() {
        Text(this.message).fontSize(30).fontColor('#00F00f')
      }.width('100%')
    }.height('100%')
    .onClick(() => {
      router.back()
    })
  }
  onPageShow(){//页面显示时触发
    console.log('page2……onPageshow')
  }
  onPageHide(){//页面每次被隐藏时触发一次
    console.log('page2……onPageHide')
  }
  onBackPress(){//点击页面下方手机返回键
    console.log('page2……onBackPress')
  }
}

        注意:要将页面1和页面2添加到路由中。

        测试效果如下:

3.组件生命周期解析

        页面1测试代码:

import router from '@ohos.router'
@Entry
@Component
struct LiveForOne{
  @State message:string='page1'
  @State flag:boolean=true
  build() {
    Row() {
      Column({space:10}) {
        Text(this.message).fontSize(30).fontColor('#00F00f')
        if(this.flag){
          LiveForOne_son({flag1:$flag})
        }else{
        }
      }.width('100%')
    }.height('100%')
    .onClick(() => {
      router.pushUrl({url:'pages/LiveForTwo'})
    })
  }
  onPageShow(){//页面显示时触发
    console.log('page1……onPageshow')
  }
  onPageHide(){//页面每次被隐藏时触发一次
    console.log('page1……onPageHide')
  }
  onBackPress(){//点击页面下方手机返回键
    console.log('page1……onBackPress')
  }
}
@Component
struct LiveForOne_son{
  @Link flag1:boolean
  build() {
    Column() {
      Text('子组件Text').fontSize(20).fontColor('#FF0F0F')
      Button('子组件Button')
        .backgroundColor('#FF00F0')
        .type(ButtonType.Capsule)
        .fontSize(20).onClick(() => {
        this.flag1=!this.flag1
      })
      Image($r('app.media.icon')).objectFit(ImageFit.Auto)
    }
  }
  aboutToAppear(){
    console.log('page1组件……aboutToAppear')
  }
  aboutToDisappear(){
    console.log('page1组件……aboutToDissappear')
  }
}

        页面2测试代码:

import router from '@ohos.router'
@Entry
@Component
struct LiveForTwo{
  @State message:string='page2'
  build() {
    Row() {
      Column({space:10}) {
        Text(this.message).fontSize(30).fontColor('#00F00f')
        LiveForTwo_son()
      }.width('100%')
    }.height('100%')
    .onClick(() => {
      router.back()
    })
  }
  onPageShow(){//页面显示时触发
    console.log('page2……onPageshow')
  }
  onPageHide(){//页面每次被隐藏时触发一次
    console.log('page2……onPageHide')
  }
  onBackPress(){//点击页面下方手机返回键
    console.log('page2……onBackPress')
  }
}
@Component
struct LiveForTwo_son{
  build() {
    Column() {
      Text('子组件Text').fontSize(20).fontColor('#FF0F0F')
      Button('子组件Button')
        .backgroundColor('#FF00F0')
        .type(ButtonType.Capsule)
        .fontSize(20)
      Image($r('app.media.icon')).objectFit(ImageFit.Auto)
    }
  }
  aboutToAppear(){
    console.log('page2组件……aboutToAppear')
  }
  aboutToDisappear(){
    console.log('page2组件……aboutToDissappear')
  }
}

        测试效果如下:

        注意:组件生命周期是指被@Component装饰的内容,而页面入口同样被@Component装饰,所以组件生命周期同样可以在页面入口组件中使用。

4.总结

  •         页面周期函数触发顺序为:当前页面先于其他页面
  •         组件周期函数触发顺序:不管页面是否当前,组件显示生命周期>页面周期>组件析构销毁生命周期
  •         页面入口同样可以触发组件周期函数。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值