做小程序开发,页面跳转是绕不开的基础课。小程序主打轻量和便捷,如果页面切换生硬,或者数据传递出了岔子,用户体验就会大打折扣。其实,实现页面跳转无非就那几种常规方式,但里面藏着不少容易踩坑的细节。

很多从 H5 转过来的开发者,一开始总习惯性地想找 <a> 标签写个 href。但在小程序的原生环境里,并没有直接对应的 <a> 标签,取而代之的是 <navigator> 组件。

<navigator url="/pages/index/index" hover-class="navigator-hover">
返回首页
</navigator>
使用
<navigator> 最大的好处在于它是“声明式”的,不需要额外编写 JS 逻辑。它还自带了一些小程序特有的属性,比如通过 hover-class 自定义点击时的反馈样式,或者利用 open-type 直接调用微信的分享、客服等开放能力。这比单纯绑定一个点击事件去触发跳转要省事得多,也更符合小程序的开发规范。不过,如果遇到复杂的业务场景,比如需要先校验表单、请求接口,拿到结果后再决定跳去哪儿,那就得靠 JS API 来帮忙了。
最常用的是
wx.navigateTo。它会保留当前页面并跳转到新页面,用户还能点击左上角返回。
wx.navigateTo({
url: '/pages/detail/detail'
})
但如果你希望跳转后用户“回不来”——比如支付成功后的结果页,肯定不希望用户再返回去重复支付——这时候就该用
wx.redirectTo,它会关闭当前页面再进行跳转。顺便提一句,如果是要跳到底部的 TabBar 页面,用前面这两个方法都会报错,必须换成 wx.switchTab。理清这几个 API 的边界,基本能帮你避开日常开发中 80% 的跳转白屏或报错问题。跳转往往伴随着数据传递。比如从列表页点进详情页,总得告诉详情页展示哪条数据。最简单的做法是在 URL 后面拼上 query 参数:
<navigator url="/pages/detail/detail?id=123">
查看详情
</navigator>
这里有个新手很容易踩的坑:在目标页面里试图用
wx.getStorageSync 去读这个参数。其实,getStorageSync 是用来读取本地缓存的,URL 上的 query 参数必须通过页面的生命周期函数 onLoad 来接收。onLoad(options) {
console.log(options.id); // 这里就能拿到 123
}

另外要注意的是,URL 传参有长度限制,而且只能传递字符串。如果要传一个复杂的对象,建议先用
JSON.stringify 进行序列化,或者干脆把数据存到全局状态(如 Vuex、Redux)或本地缓存里,跳转过去后再通过 ID 去读取。这样处理,代码会健壮得多。说到底,无论是用组件还是调 API,技术实现本身并不复杂。真正考验功底的是,你能不能根据不同的业务场景选择最合适的跳转方式,并把页面间的数据流转设计得清晰合理。把跳转这件小事做顺滑了,小程序的整体质感自然就上去了。
अभी लॉगिन करें