鸿蒙NEXT-HMRouter,在使用router后无法跳转问题解决

简介: 作者在使用HMRouter搭建鸿蒙三层架构App时,遇到登录页跳转首页后无法继续跳转的问题。经排查发现,错误原因是在onVisibleAreaChange中直接跳转导致页面生命周期冲突。解决方案是将跳转逻辑移至页面生命周期回调如aboutToAppear中执行,从而确保路由状态正常,成功修复Bug。


作者使用三方库@HMRouter,用来搭建鸿蒙的三层架构(基础特性层,产品定制层,公共能力层)完成App,跨包跳转的时候,在登录页进入首页的时候遇到了一个奇怪的Bug,在我们使用router.push()跳转后,然后再使用HMRouter突然就无法跳转页面了,那么我们该怎么办呢?,现在将该bug的解决方法分享出来。

错误示例代码如下所示:

import { router } from '@kit.ArkUI';

@Entry
@ComponentV2
struct LoginPage {
@State message: string = 'Hello World';
aboutToAppear(): void {
console.log('LifeCircle创建')
}
onDidBuild(): void {
console.log('LifeCircle组件构建完成')
}
onPageShow(): void {
console.log('页面-PageShow')
}
onPageHide(): void {
console.log('页面-Page隐藏')
}
build() {
Column(){
/登录页面代码省略/
}
.onVisibleAreaChange([1.0],()=>{
/
省略登录校验过程*
/
router.replaceUrl({url:'pages/Index'})
})
}
}

作者为了方便,当已经登录过了之后就直接在onVisibleAreaChange中直接登录跳转到首页去了,到了首页发现,使用HMRouter无法跳转到其他页面了,点击跳转按钮也没有任何反应。

分析错误原因:

onVisibleAreaChange 是高频触发的回调,若在此处直接跳转,可能因页面未完全初始化导致路由状态异常。(页面生命周期冲突)

解决方案:

避免在 onVisibleAreaChange 中直接跳转,改用显式触发(如按钮点击)或页面生命周期回调

例如下面示例代码所示:

import { router } from '@kit.ArkUI';

@Entry
@Component
struct LoginPage{
@State message: string = 'Hello World';
aboutToAppear(): void {
router.replaceUrl({url:'pages/Index'})
console.log('LifeCircle创建')
}
onDidBuild(): void {
console.log('LifeCircle组件构建完成')
}
onPageShow(): void {
console.log('页面-PageShow')
}
onPageHide(): void {
console.log('页面-Page隐藏')
}
build() {
Column(){
}
}
}

在aboutToAppear中,进行我们的页面跳转即可。

实际结果:在页面生命周期回调中跳转到首页后,HMRouter,可以正常跳转页面。Bug修复成功。

相关文章
|
开发工具 Android开发 开发者
HarmonyOS NEXT实战:接入QQ SDK
《HarmonyOS Next实战:集成三方SDK实现QQ登录功能》 本文详解如何在HarmonyOS应用中接入腾讯QQ开放平台SDK,完成QQ登录功能开发。内容涵盖开发者注册、应用申请、鸿蒙项目配置及SDK集成步骤,并提供代码示例与接入流程说明,助力教育类应用快速集成社交登录功能。
789 0
|
开发工具 开发者
HarmonyOS NEXT实战:openCustomDialog自定义弹窗
本文介绍了在HarmonyOS SDK中使用UIContext获取PromptAction对象,通过openCustomDialog接口实现自定义弹出框的方法。重点讲解了ComponentContent方式创建弹窗,支持动态更新与灵活样式定制,并附实现步骤与完整示例代码。
507 0
|
API 开发者
鸿蒙NEXT-API19获取上下文,在class中和ability中获取上下文,API迁移示例-解决无法在EntryAbility中无法使用最新版API获取上下文
本文介绍了鸿蒙API 16升级后,如何通过UIContext获取上下文及替代已废弃API的方法,包括组件、类和Ability中的使用示例,并提供了promptAction、router等常用API的迁移方案,帮助开发者顺利适配新版系统。
838 0
|
人工智能 Java 程序员
一文彻底拿下HarmonyOS实战开发之HMRouter实现跳转
本文介绍HarmonyOS页面跳转的两种方式:组件导航(Navigation)和页面路由(@ohos.router)。重点推荐使用组件导航,因其灵活性和多端部署能力更强。此外,还介绍了HMRouter,一个简化页面跳转的工具,支持自定义注解、路由拦截、动画配置等功能。通过详细步骤,展示了如何在项目中集成HMRouter并实现页面跳转,帮助开发者更高效地开发鸿蒙应用。君志所向,一往无前!关注我,带你起飞鸿蒙开发!
1198 0
|
开发者
鸿蒙NEXT-鸿蒙三层架构搭建,嵌入HMRouter,实现便捷跳转,新手攻略。(1/3)
本文介绍了如何搭建鸿蒙三层架构并集成HMRouter,实现页面自由跳转。内容包括:将项目与AGC控制台关联、创建公共能力层、基础特性层及产品定制层,帮助开发者构建模块化应用。
298 0
【HarmonyOS】HMRouter使用详解(二)
HMRouter中使用HMRouterMgr的静态方法push()和replace()来实现路由跳转。使用pop()方法来实现页面返回 * push :目标页面不会替换当前页,而是插入页面栈。可以使用pop实现页面的返回操作。 * replace:目标页面会替换当前页,并销毁当前页。这样可以释放当前页的资源,并且无法返回到当前页。 * pop:返回页面栈的上一个页面,skipedLayerNumber 页面返回的层级数量,默认为0,表示返回上一级,1表示跳过一级页面返回
857 8
【HarmonyOS】HMRouter使用详解(二)
|
JSON 缓存 程序员
玩转HarmonyOS NEXT网络请求:从新手到高手的实战秘籍
本文以通俗易懂的方式讲解了HarmonyOS网络请求的核心知识,从基础概念到实战技巧,再到进阶优化,帮助开发者快速上手。通过“点外卖”的类比,形象解释了HTTP请求方法(如GET、POST)和JSON数据格式的作用。同时,提供了封装工具类的示例代码,简化重复操作,并分享了常见问题的解决方法(如权限配置、参数格式、内存泄漏等)。最后,还探讨了如何通过拦截器、缓存机制和重试机制提升请求功能。无论你是新手还是进阶开发者,都能从中受益,快动手实现一个新闻App试试吧!
688 5
|
容器
【HarmonyOS】HMRouter使用详解(一)环境配置
在项目中使用官方推荐的Navigation时,需要在所有的页面上都添加一层NavDestination,在代码阅读上会增加多个层级,而且还要在主页面设置对应名字的跳转等问题,配置起来比较繁琐。看到大佬开发的HMRouter使用起来方便简洁,因此,写下这篇文章记录HMRouter的使用。
805 8
【HarmonyOS】HMRouter使用详解(一)环境配置
|
开发工具 开发者
HarmonyOS NEXT实战:弹出底部菜单
本教程介绍如何使用HarmonyOS SDK中的半模态页面(bindSheet)实现底部菜单的弹起与关闭效果。内容涵盖半模态页面的生命周期、交互规则及使用约束,并通过实战示例BottomPopUpDemoPage演示构建底部菜单栏的具体实现方法,适用于教育学习与开发实践。
322 0

热门文章

最新文章