页面将要出现(新建)
在创建自定义组件后,执行其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不打印。