HarmonyOS 鸿蒙Next Tabs里的组件生命周期(onPageShow)不回调

发布于 1周前 作者 zlyuanteng 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next Tabs里的组件生命周期(onPageShow)不回调

17 回复
求助各位大佬!
[@Entry](/user/Entry)
[@Component](/user/Component)
struct MainPage {
build() {
Tabs({ barPosition: BarPosition.End, controller: this.tabsController }) {
TabContent() {
MyPage()
}
.tabBar(this.TabBuilder('我的', 3, $r('app.media.ic_tab_user_sel'), $r('app.media.ic_tab_user_nor')))

}
[@Entry](/user/Entry)
[@Component](/user/Component)
export struct MyPage {}
主页面以及MyPage的onPageShow在每次切换tab都不会走到
onPageShow() {
this.requestMineUserInfo()
}

你的MyPage是通过import进来使用的话那就是组件了 不能使用onPageShow

你的MainPage是用[@Entry](/user/Entry)修饰

如果你的MyPage也是通过[@Entry](/user/Entry)修饰 import进来的话 你就可以理解为“有两个Entry” 这是不允许的,一个主页面只能有一个[@Entry](/user/Entry)

华为已经回复了:

开发者您好,当引入MyPage页面后,MyPage相当于组件,不再是页面,所以不会触发onPageShow
onPageShow的文档参考:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-page-custom-components-lifecycle-0000001820879573

关于aboutToAppear只会在tab切换时触发一次
如果需要判断MyPage是否显示,可以考虑使用onVisibleAreaChange可见区域变化事件,例如:
MyPage()
.onVisibleAreaChange([0.0, 1.0], (isVisible: boolean, currentRatio: number) => {
console.info('MyPage isVisible: ' + isVisible + ', currentRatio:' + currentRatio)
})

参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-universal-component-visible-area-change-event-0000001774280838

看个文章还要NM受邀请,真服了

我是这样理解的,因为MainPage时entry修饰的,肯定是个页面,然后又说,一个页面只能有一个page,所以虽然用entry修饰了mypage,但是mypage也不是page了,只能算个自定义组件了,你把mypage的entry去掉,不会有i一点影响

对的,提工单问了下也是这样回复的

升级HarmonyOS后,发现手机的游戏性能也有了显著提升。

通过tabs组件,tabContent内引入的是导出的某个[@Entry](/user/Entry)修饰的组件,引入的目标不再是page了,自然也没有页面的生命周期了。只有tabs组件所在的page有正常的生命周期, 引入的目标只有第一次aboutToAppear会调用。

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

我有发现了你这个问题,TabContent里面的page都使用entry装饰的,但是切换tab时和其他页面router时,pageshow,pagehide都不执行诶
仔细看文档啊 [@Entry](/user/Entry) 装饰器标注的组件才有这个回调

两个页面都是@Entry修饰的

MyPage 这种用法只算个正常组件了 onPageShow这类肯定不走 只会走组件的生命周期

大佬,我两个页面都是@Entry修饰的

在HarmonyOS中,如果onPageShow生命周期方法不回调,这通常与页面或组件的显示逻辑有关。首先确认该组件或页面确实被加载并尝试显示。检查是否有任何条件渲染或导航逻辑阻止了页面的显示。此外,确保onPageShow是在正确的组件或页面中定义的,并且该组件或页面是当前激活的。

还需查看是否有其他错误或异常在控制台输出,这可能会影响组件的生命周期。如果问题依旧没法解决请加我微信,我的微信是itying888。

回到顶部