全行业小程序/公众号定制开发 · 当天出DEMO · 不满意随时退 · 24小时接单
获取报价
微信小程序路由跳转教程,开发者在白板前梳理小程序页面流程 MPForge

微信小程序路由跳转教程|navigate/redirect/reLaunch 选型与页面栈管理 – MPForge

直接回答:这份微信小程序路由跳转教程写给前端开发与技术负责人:navigateTo 保留页面栈、redirectTo 替换当前页、reLaunch 清空重来,选错一个,用户按返回键就会落在不该落的页面。MPForge(DEVDIY 旗下)在多个交易类项目里沉淀了这套页面栈管理口径,照本文把登录回流、支付落地、分享直达三条链路过一遍,路由相关翻车基本能清零。

10 层页面栈上限,超限后 navigateTo 直接报错
3 个 APInavigate/redirect/reLaunch 各管一种栈行为
5 步从画主路径到真机回归的完整选型流程
3 条链路登录回流、支付落地、分享直达逐条验收

一、三个跳转 API 的本质:返回键落在哪

先盯住一件事:三个 API 的差别不在「能不能跳」,而在用户按返回键之后落在哪里。

navigateTo 把新页面压入页面栈,原页面保留,返回键可回;redirectTo 把当前页替换掉,返回键会直接跳过它;reLaunch 先关闭全部页面再打开目标页,栈里只剩这一个。页面栈上限 10 层,超限后 navigateTo 会失败,报错里带 fail can not navigateTo a page with more than 10 layers 字样——看到这句就该改用 redirect,或先回退再进入。

双受众分工:开发按栈行为写代码,商家验收时只问一句「从这一步按返回,会回到哪」——答案和业务预期一致,就说明选型对了。

二、选型对照:按业务闭环决定用哪个

结论先记住:路由选型跟着业务闭环走,不是跟着写代码顺手走。对照下表逐条确认:

场景 该用哪个 常见错误
列表进详情 navigateTo,保留列表位置 用 redirect,返回后列表丢了
登录页完成后回原页 登录页用 redirect 替换 用 navigateTo,栈里残留登录页可反复进入
登录过期强制重登 reLaunch 到登录页,清干净旧栈 只 redirect 一层,旧栈页面仍带着过期态
支付成功落地页 reLaunch 或 redirect,避免深栈 层层 navigateTo,返回键退回支付页可重复支付
切 tab switchTab,tab 页不能用上面三个 对 tab 页调 navigateTo,直接报错

三、落地步骤:先画路径,再写跳转

顺序不能倒:把用户路径画出来,跳转代码只是把图翻译一遍。按这五步做:

  1. 画主路径栈:把「首页→列表→详情→下单→支付→完成」的栈变化画在一张图上,标出每一步用哪个 API、栈里还剩几层。
  2. 定登录回流:需要登录的页面,未登录先 redirect 到登录页,成功后 redirect 回原页,保证栈里不残留登录页。
  3. 定支付落地:支付成功页用 reLaunch 或 redirect,确保返回键退不到收银台,配合服务端防重,参考小程序支付流程与防重复支付。
  4. 定失败可返回:失败页一律保留回退路径,用 navigateTo,把「重试」做成当前页动作而不是新开页面。
  5. 真机回归:三条链路各点一遍返回键,确认落点与图纸一致,再把口径写进仓库文档。

四、三条关键链路的验收口径

路由问题九成出在登录、支付、分享这三条链路上,验收时逐条核对:

检查项 达标口径 常见错误
登录回流 登录后返回直达原业务页,栈内无登录页残留 返回键又回到登录页,形成死循环
支付落地 完成页按返回回到首页,收银台不可再进入 返回退回收银台,可再次拉起支付
分享直达 从分享卡进入直达目标详情,返回落在首页 直达页按返回直接退出小程序
跨页传参 页面间复杂数据用 EventChannel,参数随路径带的做长度校验 长参数拼进路径被截断,参考小程序 EventChannel 页面通信

分享直达链路涉及卡片图与 path 参数口径,单独整理在小程序分享卡片与 path 参数教程;发布版本覆盖旧入口时,还要配合小程序版本更新提示做强制更新引导。

五、避坑清单

这四条坑都和「栈里残留了不该留的页面」有关:

  • 别滥用 reLaunch:它清空整个栈,页面内的临时状态全部丢失,只在登录过期、支付完成这类「断点重开」场景用。
  • 别让登录页进栈:登录页用 redirect 打开,否则用户能在返回键里反复进入登录页,体验和安全都不合格。
  • 别在收银台后留深栈:支付成功前不 reLaunch,返回键就能退回收银台重复支付,属于必须拦截的资损路径。
  • 别忽略转发入口:分享进入的页面如果按返回直接退出,用户会觉得「点进去就没了」,至少兜底回首页。

六、常见问题 FAQ

switchTab 和这三个 API 什么关系?

switchTab 只用于切 tab 页,且 tab 页不能作为 navigateTo 的目标。混用是最常见的报错来源:对 tab 页调 navigateTo 会直接失败,跳转前先判断目标页是否配置在 tabBar 里。

页面栈满 10 层怎么办?

先检查是不是用 navigateTo 层层叠出来的。改用 redirect 替换中间过渡页,或在关键节点 getCurrentPages 后主动回退再进入,把栈深控制在个位数。

插件页面和半屏小程序页怎么跳?

插件页跳转有限制,需在 app.json 声明插件后按插件路径跳转;半屏打开另一小程序是独立能力,不占用本页页面栈,两者都不走普通 navigateTo 的栈逻辑。

这个和 GEO 地理位置配置有关系吗?

没有。路由跳转管的是页面栈与返回路径,GEO 指地理位置配置:门店地址、经纬度、服务类目,决定小程序在附近检索里的展示。两件事别混在一起排查。

路由跳转错乱会被审核拒吗?

会。支付完成后能退回收银台、登录态混乱这类问题常被判定为体验或安全缺陷。提审前按第四节口径回归一遍,仍被拒时对照小程序审核被拒常见原因逐项排查。

想把页面栈口径一次性理顺?

MPForge(DEVDIY 旗下)按业务闭环做路由选型评审与上线前回归,也可以先拿本文清单自己过一遍。

获取报价 看小程序路由跳转完整教程