uniapp 不同路由之间的区别

在UniApp中,路由跳转是实现页面导航的核心功能,常见的路由跳转方式包括navigateTo、redirectTo、reLaunch、switchTab和navigateBack。这些方法在跳转行为和适用场景上有所不同。

一、路由跳转的类型与区别

1. uni.navigateTo(OBJECT)
  • 特点
    • 保留当前页面,跳转到应用内的某个页面。
    • 可以通过 uni.navigateBack() 返回上一个页面。
    • 会生成新的页面实例,页面栈最多十层。
  • 限制
    • 不能跳转到 tabBar 页面。
    • 页面栈超过十层后无法继续跳转。
  • 应用场景
    • 适合需要返回操作的页面跳转,如从列表页跳转到详情页。
2. uni.redirectTo(OBJECT)
  • 特点
    • 关闭当前页面,跳转到应用内的某个页面。
    • 无法通过返回按钮回到上一个页面。
    • 会销毁当前页面实例,减少内存占用。
  • 限制
    • 同样不能跳转到 tabBar 页面。
  • 应用场景
    • 登录成功后跳转到主页,防止用户返回登录页。
    • 表单提交成功后跳转到结果页。
3. uni.reLaunch(OBJECT)
  • 特点
    • 关闭所有页面,打开应用内的某个页面。
    • 页面栈会被清空,只剩新打开的页面。
    • 无论从哪个页面跳转,结果页的返回逻辑都是一致的。
  • 应用场景
    • 退出登录时跳转到登录页。
    • 应用初始化时跳转到引导页或主页。
4. uni.switchTab(OBJECT)
  • 特点
    • 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。
    • tabBar 页面的生命周期比较特殊,切换时不会销毁。
    • 只能跳转到配置在 pages.json 中的 tabBar 页面。
  • 应用场景
    • 底部导航栏的页面切换。
5. uni.navigateBack(OBJECT)
  • 特点
    • 关闭当前页面,返回上一页面或多级页面。
    • 通过 delta 参数指定返回的级数。
    • 不会创建新的页面实例,性能较好。
  • 应用场景
    • 在详情页点击返回按钮回到列表页。
    • 通过参数控制返回多级页面。

二、不同跳转方式的对比表

方法 是否关闭当前页面 是否可返回 是否支持 tabBar 页面 页面栈变化 生命周期影响
uni.navigateTo 增加一个页面实例 触发新页面的 onLoad
uni.redirectTo 替换当前页面实例 触发当前页面的 onUnload
uni.reLaunch 取决于目标 清空所有页面,只剩新页面 触发所有旧页面的 onUnload
uni.switchTab 关闭所有非 tabBar 页面 tabBar 页面不会销毁
uni.navigateBack 减少指定数量的页面实例 触发当前页面的 onUnload

三、特殊场景下的选择建议

  1. 需要返回上一页 :使用 navigateTo,配合 navigateBack 返回。
  2. 禁止返回操作 :使用 redirectToreLaunch,例如登录成功后。
  3. tabBar 页面切换 :必须使用 switchTab,其他方法无效。
  4. 重置应用状态 :使用 reLaunch,例如退出登录或切换账号。
  5. 多级返回 :使用 navigateBack 并设置 delta 参数。

四、注意事项

  1. 页面栈限制
    • navigateTo 的页面栈最多十层,超过后无法继续跳转。
    • 可以通过 getCurrentPages() 获取当前页面栈信息。
  2. 生命周期差异
    • switchTab 切换到的 tabBar 页面不会触发 onLoad,而是触发 onShow
    • 缓存页面(使用 <keep-alive>)会触发 onShowonReady,但不会触发 onLoad
  3. 参数传递
    • 跳转时可以通过 URL 参数传递简单数据,如 url: '/pages/detail?id=123'
    • 复杂数据可以通过全局变量、Vuex 或本地存储传递。

五、代码示例

javascript 复制代码
// 1. 跳转到非 tabBar 页面(保留当前页)
uni.navigateTo({
  url: '/pages/detail/detail?id=123'
});

// 2. 关闭当前页并跳转
uni.redirectTo({
  url: '/pages/result/result'
});

// 3. 清空所有页面并跳转
uni.reLaunch({
  url: '/pages/index/index'
});

// 4. 跳转到 tabBar 页面
uni.switchTab({
  url: '/pages/tabBar/home/home'
});

// 5. 返回上一页
uni.navigateBack({
  delta: 1
});

掌握这些路由跳转方式的区别,能让你在开发 UniApp 应用时更加得心应手,根据不同的场景选择最合适的跳转方式。

相关推荐
乌兰麦朵14 分钟前
Vue吹的颅内高潮,全靠选择性失明和 .value 的PUA!
前端·vue.js
Code季风14 分钟前
Gin Web 层集成 Viper 配置文件和 Zap 日志文件指南(下)
前端·微服务·架构·go·gin
蓝倾15 分钟前
如何使用API接口实现淘宝商品上下架监控?
前端·后端·api
舂春儿16 分钟前
如何快速统计项目代码行数
前端·后端
毛茸茸16 分钟前
⚡ 从浏览器到编辑器只需1秒,这个React定位工具改变了我的开发方式
前端
Pedantic17 分钟前
我们什么时候应该使用协议继承?——Swift 协议继承的应用与思
前端·后端
Software攻城狮18 分钟前
vite打包的简单配置
前端
Codebee18 分钟前
如何利用OneCode注解驱动,快速训练一个私有的AI代码助手
前端·后端·面试
流星稍逝19 分钟前
用vue3的写法结合uniapp在微信小程序中实现图片压缩、调整分辨率、做缩略图功能
前端·vue.js
知了一笑22 分钟前
独立开发问题记录-margin塌陷
前端