HarmonyOS TabContent页面生命周期不触发

TabContent页面生命周期不触发。

1. IDE官方模版创建出来的项目, entry/src/main/ets/pages/Index.ets里写了个tabs。

build() {  
   if (this.isLogin) {  
     MainTabs()  
   } else  {  
     SMSAuthPage()  
   }  
 }

2. MainTabs代码:

import { RoadMapPage as HomePage } from '@jlgl/lesson';  
import { MinePage } from '@jlgl/mine'  
import { PurchasePage } from '@jlgl/purchase';  
import { MainPage as SOETestPage} from '@jlgl/soe/src/main/ets/components/mainpage/MainPage'  
@Component  
export struct MainTabs {  
  private tab_name_home: string = '首页'  
  private tab_name_mine: string = '我的'  
  private tab_name_purchase: string = '购买'  
  @State selectedIndex: number = 0;  
  @Provide hideTabBars: boolean = false;  
  @Builder tabBuilder(title: string, index: number, selectedImag: Resource, normalImag: Resource) {  
    Column() {  
      Image(this.selectedIndex === index ? selectedImag : normalImag)  
        .objectFit(ImageFit.ScaleDown)  
        .size({width:40, height:40})  
      Text(title)  
        .fontSize(12)  
        .fontColor(this.selectedIndex === index ? $r('app.color.theme_tab_highlighted') : $r('app.color.theme_tab_normal'))  
    }  
    .width('100%')  
    .height(60)  
    .justifyContent(FlexAlign.Center)  
  }  
  build() {  
    Tabs({barPosition: BarPosition.End}) {  
      TabContent() {  
        HomePage()  
      }  
      .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP])  
      .tabBar(this.tabBuilder(this.tab_name_home, 0, $r('app.media.icon_tab_study_active_new'), $r('app.media.icon_tab_study_default_new')))  
      TabContent() {  
        PurchasePage()  
      }.tabBar(this.tabBuilder(this.tab_name_purchase, 1, $r('app.media.icon_tab_purchase_active_new'), $r('app.media.icon_tab_purchase_default_new')))  
      TabContent() {  
        MinePage()  
      }.tabBar(this.tabBuilder(this.tab_name_mine, 2, $r('app.media.icon_tab_user_active_new'), $r('app.media.icon_tab_user_default_new')))  
      TabContent() {  
        SOETestPage()  
      }.tabBar(this.tabBuilder(this.tab_name_mine, 2, $r('app.media.icon_tab_user_active_new'), $r('app.media.icon_tab_user_default_new')))  
    }  
    .scrollable(false)  
    .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP])  
    .barHeight(this.hideTabBars ? 0 : 56)  
    .animationDuration(0)  
    .onChange((index: number) => {  
      console.info('change index ', index)  
      this.selectedIndex = index  
    })  
  }  
}

3. HomePage跳转到二级页面再回来,生命周期函数不触发。

生命周期函数:

aboutToReuse(params: Record<string, ESObject>) {  
}  
aboutToAppear(): void {  
}  
onPageShow(): void {  
}

跳转函数:

router.pushNamedRoute({  
   name: 'LessonDetailPage',  
   params: {  
     lessonId: params.get('id')  
   }  
 })

二级页面回退函数:

router.back()
HarmonyOS
2024-10-17 10:07:08
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple

1、请参考自定义组件的生命周期文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-custom-component-lifecycle-V5#abouttoappear

2、可以结合组件可见区域变化事件使用。参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-component-visible-area-change-event-V5

1中的文档有表明生命周期函数调用的条件:

aboutToAppear:在创建自定义组件的新实例后,在执行其build()函数之前执行。子组件仅第一次会创建。

onPageShow:页面每次显示时触发一次,包括路由过程、应用进入前台等场景,仅@Entry装饰的自定义组件生效。

分享
微博
QQ
微信
回复
2024-10-17 15:25:17
相关问题
HarmonyOS 生命周期触发
78浏览 • 1回复 待解决
HarmonyOS 页面生命周期问题
26浏览 • 1回复 待解决
HarmonyOS navigation主页面生命周期
535浏览 • 1回复 待解决
TabContent 内容的生命周期
433浏览 • 1回复 待解决
HarmonyOS 生命周期回调触发
80浏览 • 1回复 待解决
HarmonyOS页面onPageShow生命周期不回调
1042浏览 • 1回复 待解决