外观
小程序页面怎么跳转?
页签用 switchTab,普通页面进栈用 navigateTo,替换当前页用 redirectTo,关掉所有页面打开某个页用 reLaunch。返回用 navigateBack。栈有深度上限,不能无限 navigateTo。
原理
navigateTo 保留当前页,所以返回时状态还在,但页面只是隐藏,onHide 会触发,不是 onUnload。redirectTo 会卸载当前页,不能再返回它。switchTab 只能跳到 tabBar 里配置的页面,而且会关掉非页签的页面栈。
参数放在 URL 查询串里,在目标页的 onLoad 读取。参数有长度限制,不要塞整个对象。需要传大对象时,放进上一个页面都能访问的状态里,并约定返回时怎么清理。
自定义导航栏不会改变这套栈,只改变画出来的栏。返回按钮如果自己画,仍然调用 navigateBack。
追问
和网页路由的差别?
网页的 history 模式由前端路由库模拟。小程序的栈是运行环境管的,API 是上面这几个,不能用 history.pushState。刷新这个概念也不一样,页面被销毁后状态就没了。
登录后再回到原页面?
跳登录前记下当前路径。登录成功用 redirectTo 或 navigateBack 回去。用 navigateTo 会把登录页留在栈里,返回又回到登录。
易错点
- 对 tabBar 页面使用
navigateTo,调用失败。 - 栈超过限制仍继续进入下一页,没有改成
redirectTo。 - 在
onUnload里假设还能setData。页面已经在卸载。