HarmonyOS 鸿蒙Next 使用Navigation做页面跳转时A页面自定义组件生命周期方法

HarmonyOS 鸿蒙Next 使用Navigation做页面跳转时A页面自定义组件生命周期方法

1、使用Navigation的方式跳转页面,A到B页面的时候 A页面的onxxxHiden方法和disappear方法都没有执行

3 回复
Navigation作为路由容器,其生命周期承载在NavDestination组件上,以组件事件的形式开放。

其生命周期大致可分为三类,自定义组件生命周期、通用组件生命周期和自有生命周期。其中,aboutToAppear和aboutToDisappear是自定义组件的生命周期(NavDestination外层包含的自定义组件),OnAppear和OnDisappear是组件的通用生命周期。剩下的六个生命周期(onWillAppear 、onWillShow 、onShown、onWillHide、onHidden、onWillDisappear)为NavDestination独有。

参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/arkts-navigation-navigation-V13#%E9%A1%B5%E9%9D%A2%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F

更多关于HarmonyOS 鸿蒙Next 使用Navigation做页面跳转时A页面自定义组件生命周期方法的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


import { hilog } from '@kit.PerformanceAnalysisKit';

@Entry
@ComponentV2
struct Index {
  private pathStack = new NavPathStack()

  build() {
    Navigation(this.pathStack) {
      Column() {
        Button('go child')
          .onClick(() => {
            this.pathStack.pushPathByName('child', null)
          })
      }.onVisibleAreaChange([1], (isShow) => {
        hilog.debug(0x000000, 'rainrain', 'index isShow == ' + isShow)
      })
    }.size({ width: '100%', height: '100%' })
    .hideTitleBar(false)
    .hideToolBar(false)
    .navDestination(this.BuilderMap)
  }

  @Builder
  BuilderMap(name: string) {
    if (name == 'child') {
      ChildPage()
    } else {
      ThirdPage()
    }
  }
}

@ComponentV2
struct ChildPage {
  build() {
    NavDestination() {
      Column() {
        Button('pop ').onClick(() => {
          this.queryNavigationInfo()?.pathStack.pop()
        })
        Button('next').onClick(() => {
          this.queryNavigationInfo()?.pathStack.pushPathByName('third', null)
        })
      }
    }.size({ width: '100%', height: '100%' })
    .onShown(() => {
      hilog.debug(0x000000, 'rainrain', 'child show')
    }).onHidden(() => {
      hilog.debug(0x000000, 'rainrain', 'child onHidden')
    })
  }
}

@ComponentV2
struct ThirdPage {
  build() {
    NavDestination() {
      Column() {
        Button('pop ').onClick(() => {
          this.queryNavigationInfo()?.pathStack.pop()
        })

      }
    }.size({ width: '100%', height: '100%' })
    .onShown(() => {
      hilog.debug(0x000000, 'rainrain', 'Third show')
    }).onHidden(() => {
      hilog.debug(0x000000, 'rainrain', 'Third onHidden')
    })
  }
}

在HarmonyOS鸿蒙Next系统中,使用Navigation进行页面跳转时,A页面的自定义组件生命周期方法会按照组件的生命周期规范执行。具体表现如下:

  1. onCreate:当组件被创建时调用,这是组件生命周期的开始。

  2. onAttached:当组件被附加到窗口时调用,此时组件已经与界面关联。

  3. onStart:当组件变为可见状态时调用,此时用户可以看到组件的UI。

  4. onActive:当组件处于前台活动状态时调用,此时组件可以接收用户输入等交互。

  5. onInactive:当组件失去前台活动状态但仍然可见时调用。

  6. onEnd:当组件变为不可见状态时调用,此时用户已经看不到组件的UI。

  7. onDetached:当组件从窗口分离时调用,此时组件与界面的关联被解除。

  8. onDestroy:当组件被销毁时调用,这是组件生命周期的结束。

在A页面进行页面跳转时,如果A页面中的自定义组件被移除或隐藏,相应的生命周期方法(如onEnd、onDetached)将会被触发。如果跳转后A页面重新显示,相应的生命周期方法(如onStart、onActive)也会被再次调用。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部