一个小程序好不好用,很多时候不取决于某个页面做得多精致,而取决于用户能不能顺畅地从一页走到另一页。首页看到活动,点进详情,再跳到下单页;扫码进入门店页,返回时还能停在刚才的位置。这些动作看起来很轻,背后其实是页面路由、参数传递和页面栈管理在支撑。
小程序并不是普通 Web 页面那样整页刷新、来回切换。每个页面通常有独立路径,开发者调用框架提供的跳转接口,决定当前页面是关闭、保留还是替换,同时打开目标页面。路径是基础,参数则负责告诉目标页面“为什么跳过来、要展示什么”。比如从活动页跳到商品详情,可以带上商品 id;扫码进入门店时,也可以把门店编号、渠道来源一起传过去。触发跳转的方式也不只是点按钮,页面内滑动到某个区域、点击图片、扫描小程序码、从分享卡片进入,都可能引起一次跳转。
具体实现时,navigator 组件适合页面内部“点了就跳”的场景。它比较直观,在页面里声明目标路径就能跳转,传递简单参数也方便。但流程一旦复杂,API 方式会更常用。navigateTo 会保留当前页面,再打开新页面,适合列表到详情、详情到下单这类需要返回的路径;redirectTo 会关闭当前页再打开新页,适合用户不需要回到中间页的情况;navigateBack 用于返回上一级;switchTab 专门处理底部 tab 页切换。有些场景还会用到 reLaunch,比如登录失败、权限异常,或者活动开始后需要重置状态,这时可以把整个页面栈清掉,重新进入一个确定的页面。选择哪种方式,本质上是在判断用户下一步该往哪走、要不要返回、返回到哪一步。
真正容易出问题的,往往不是“能不能跳过去”,而是跳过去之后数据有没有跟上。页面之间传数据,最简单的是 URL 参数,适合传少量关键值,比如 id、状态、来源。但参数不能太敏感,也不宜太长;遇到中文或特殊字符时还要考虑编码,否则解析容易出错。如果数据量稍大,或者多个页面要共用同一份信息,可以借助全局变量、本地缓存,或者更结构化的存储方式。关键不是把所有东西都塞进跳转链接里,而是让目标页面知道该取哪些数据、从哪里取。

还有一个前提容易被忽略:页面路径要在 app.json 中注册。不少新手会先写好跳转代码,结果点过去没有反应,最后才发现新页面根本没被小程序识别。路径拼写、大小写、注册信息是否同步,都是日常排查时要留意的地方。页面栈也不是想叠多深就叠多深。如果连续使用 navigateTo,页面会一层层压上去,返回路径也会越来越长,用户可能绕回一个已经没有意义的页面。遇到这种情况,可以考虑用 redirectTo 替换当前页,或者在流程结束时用 reLaunch 重新打开主入口。对于 tab 页,则应该使用 switchTab,不要用普通跳转方式硬处理,否则体验会显得别扭。
说到底,小程序跳转不是一个孤立的语法点,而是整套交互体验的一部分。链路设计得太深,用户容易迷路;参数传递得不清楚,页面就可能出现空白或错乱;页面栈没管好,返回键也会变得难以预期。把路径、参数、页面层级和触发方式理清楚,很多看似神秘的问题都会变得有迹可循。对开发者来说,根据业务场景选对跳转方式,比单纯记住接口名更重要。

立即登录