鸿蒙开发——生命周期

页面将要出现(新建)
在创建自定义组件后,执行其build()函数之前执行(NavDestination创建之前),允许在该方法中改变状态变量,更改将在后续执行build()函数中生效。

aboutToAppear(): void {
    console.log("aboutToAppear")
  }

页面将要消失(销毁)
自定义组件析构销毁之前执行,不允许在该方法中改变状态变量。

  aboutToDisappear(): void {
    console.log("aboutToDisappear")
  }

页面新建或app从后台回到前台(只在@Entry修饰的页面生效)

onPageShow(): void {
    console.log("onPageShow")
  }

页面销毁或app回到后台(只在@Entry修饰的页面生效)

  onPageHide(): void {
    console.log("onPageHide")
  }

路由NavDestination

使用路由NavDestination管理的页面会有自己的生命周期回调

回调顺序如下:

1、onWillAppear 界面即将出现,NavDestination创建后,挂载到组件树之前执行,在该方法中更改状态变量会在当前帧显示生效。
2、onReady 界面加载完成
3、onAppear 界面出现,通用生命周期事件,NavDestination组件挂载到组件树时执行。
4、onWillShow 界面即将展示,NavDestination组件布局显示之前执行,此时页面不可见(应用切换到前台不会触发)。
5、onShown 界面已经展示,NavDestination组件布局显示之后执行,此时页面已完成布局。
6、onWillHide 界面即将消失,NavDestination组件触发隐藏之前执行(应用切换到后台不会触发)。
7、onHidden 界面已经消失,NavDestination组件触发隐藏后执行(非栈顶页面push进栈,栈顶页面pop出栈或应用切换到后台)。

示例代码

在页面中写了如下代码


 aboutToAppear(): void {
    Logger.info( 'aboutToAppear');
  }

  aboutToDisappear(): void {
    Logger.info( 'aboutToDisappear');
  }

  onPageShow(): void {
    Logger.info( 'onPageShow');
  }

  onPageHide(): void {
    Logger.info('onPageHide');
  }

build() {
    NavDestination() {
      Column() {
      }
    }
    .onWillAppear(() => {
      Logger.debug( 'onWillAppear');
    })
    .onReady((context: NavDestinationContext) => {
      Logger.debug('onReady');
    })
    .onAppear(()=> {
      Logger.debug('onAppear');
    })
    .onWillShow(() => {
      Logger.debug('onWillShow');
    })
    .onShown(() => {
      Logger.debug('onShown');
    })
    .onWillHide(() => {
      Logger.debug( 'onWillHide');
    })
    .onHidden(() => {
      Logger.debug('onHidden');
    })
  }
}

当进入这个页面,然后再进入下一个页面时,查看打印结果

打印结果:

aboutToAppear
onWillAppear
onReady
onAppear
onWillShow
onShown
onWillHide
onHidden

当进入这个页面,再退出这个页面时,查看打印结果

打印结果:

aboutToAppear
onWillAppear
onReady
onAppear
onWillShow
onShown
onWillHide
onHidden
aboutToDisappear

因为当前页面不是@Entry修饰的,所以onPageShow和onPageHide不打印。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容