HarmonyOS鸿蒙Next中从A页面跳转至B页面,B页面生命周期方法会调用两次,是什么原因呢?

HarmonyOS鸿蒙Next中从A页面跳转至B页面,B页面生命周期方法会调用两次,是什么原因呢?

this.getUIContext().getRouter().pushUrl({
  url: 'pages/PersonInfoDetailPage',
  params:{uuid:this.userUuid}
});
onPageShow(): void {
  console.log(`-----onPageShow------onPageShow`)
}


更多关于HarmonyOS鸿蒙Next中从A页面跳转至B页面,B页面生命周期方法会调用两次,是什么原因呢?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

啊 这不是不同的回调函数么,为啥说是两次。

更多关于HarmonyOS鸿蒙Next中从A页面跳转至B页面,B页面生命周期方法会调用两次,是什么原因呢?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


哈哈贴错图了,

你这个是稳定复现的吗,,


  • 深色代码主题
  • 基本信息

我测了一下 只执行一次呀。。。",

在HarmonyOS Next中,B页面生命周期方法被调用两次通常是由于以下原因:

  1. 页面路由配置问题:在config.json中重复配置了B页面的路由信息
  2. 页面跳转时重复触发:可能调用了多次router.pushUrl()方法
  3. 页面栈管理异常:当前页面栈中存在多个B页面实例
  4. 生命周期监听重复注册:在B页面中多次注册了生命周期回调

检查点:

  • 确认router.pushUrl()只调用一次
  • 检查config.json的路由配置
  • 使用router.getLength()查看页面栈情况

在HarmonyOS Next中,B页面生命周期方法被调用两次通常是由于路由跳转机制导致的。根据您提供的代码和日志,这种情况可能由以下原因引起:

  1. 路由参数变化触发重新渲染: 当使用pushUrl跳转并传递params参数时,如果参数发生变化,系统可能会重新创建页面实例,导致生命周期方法被再次调用。

  2. 页面栈管理机制: HarmonyOS的路由系统在页面跳转时可能会先创建目标页面实例,再完成跳转过渡,这个过程中可能触发多次生命周期回调。

建议检查:

  1. 确保每次跳转时params参数值是否相同
  2. 在onPageShow中添加参数变化判断逻辑
  3. 检查是否有其他路由事件监听器干扰

可以通过在onPageShow中添加参数打印来进一步诊断问题:

onPageShow(): void {
  console.log(`Params: ${JSON.stringify(this.params)}`)
  console.log(`-----onPageShow------`)
}
回到顶部