微信小程序里的页面跳转,其实真没想象中那么绕。只要把几种常见场景和对应的跳转方式搞清楚,写起来就会顺手很多。
最直观的一种,就是直接用 navigator 组件。很多时候你只想要一个可点击的跳转入口,完全没必要在 JS 里单独写事件,直接在 WXML 里放一个组件就行。比如一个按钮样式的跳转:
<navigator url="/pages/secondPage/secondPage">跳转到第二个页面</navigator>
这种写法交互成本很低,代码也干净,特别适合单纯的页面跳转。
navigator 组件还有个 open-type 属性,可以控制跳转行为。假如你想让用户跳转后不能再返回上一页——比如登录成功直接进主页,那就可以改成重定向:
<navigator url="/pages/secondPage/secondPage" open-type="redirect">重定向跳转</navigator>
这样当前页面会被替换掉,点返回也不会回到原来的页面,体验上更利落。
但很多业务场景下,跳转并不是一个简单的点击链接,而是需要跟逻辑结合起来。比如用户提交表单后跳转,或者根据接口返回的结果来决定去哪个页面。这时候就要用 API 方式了,最常用的就是
wx.navigateTo。在 JS 事件处理函数里写:wx.navigateTo({
url: '/pages/secondPage/secondPage'
})

这跟
navigator 的默认行为一样,保留当前页面,跳转到应用内的某个页面,用户还能点左上角返回。有一点要注意,wx.navigateTo 跳转的页面层级不能太深,页面栈最多十层,超过了就会失败。在长流程的交互里,这个坑得留个心。如果同样需要重定向,用
wx.redirectTo 就行,写法几乎一样:wx.redirectTo({
url: '/pages/secondPage/secondPage'
})

它跟
wx.navigateTo 的区别就在于会不会关闭当前页面。这在改变页面流转路径时很常用。比如订单支付成功后,一般就直接重定向到订单详情或结果页,不再让用户退回支付确认页,路径更干净。还有一个容易被忽略但很重要的场景:Tab 页面的跳转。如果你在
app.json 里配置了 tabBar,那几个 tab 页面之间的跳转就不能用 wx.navigateTo 或 wx.redirectTo,必须用 wx.switchTab。比如:wx.switchTab({
url: '/pages/secondPage/secondPage'
})
wx.switchTab 只能跳到 tabBar 里配置过的页面,而且不会触发页面栈的变化,也不能带参数,query 参数会被直接忽略。所以如果你需要往 tab 页传数据,通常得借助全局数据或者缓存来处理。这些跳转方式在实际开发中很少孤立使用,往往是组合起来的。拿一个常见的电商流程举例:用户从商品列表(非 tab 页)点击进入商品详情,用
wx.navigateTo;从详情页点“立即购买”跳转到下单页,继续用 wx.navigateTo;下单成功后,用 wx.redirectTo 重定向到订单详情页,清掉前面不需要的页面;如果用户想直接回到首页(tab 页),那就用 wx.switchTab。把每种跳转的特性吃透,就能让用户路径清晰,也不会出现莫名其妙的返回逻辑。
另外还有个细节,
wx.navigateTo 打开的页面一多,页面栈就容易满,这在长流程里挺常见。遇到这种情况,可以考虑用 wx.redirectTo 或 wx.reLaunch 及时清理页面栈。wx.reLaunch 会关闭所有页面,然后打开一个新的页面,适合那种需要完全重置用户路径的场景,比如从某个深层级页面直接跳回首页,并清空之前的浏览栈。这些跳转方法本身都不复杂,关键还是看业务需求。不用一次性把所有方式都背下来,边写边查文档,多踩几次坑,自然就形成了自己的使用习惯。希望这篇文章能帮你在微信小程序页面跳转上理清思路,少走弯路。
Se Connecter Maintenant