小程序踩坑(三)各种跳转的区别

0

小程序中一共有五种跳转方法,wx.navigateTo、wx.redirectTo、wx.reLaunch、wx.switchTab、wx.navigateBack,它们都有什么区别呢,怎么确定什么时候该用哪个呢。

wx.navigateTo
wx.redirectTo
x.reLaunch
wx.switchTab
wx.navigateBack

页面栈

区分这五种跳转之前,要先了解下小程序的页面栈。
通过getCurrentPages()方法可以获取到当前的页面栈,我们先来console一下看看这是个什么东西console.log(getCurrentPages())
页面栈
可以看到打印出来是一个数组,数组中有两个page的实例。证明我现在所在的页面是在第二级,打开这个实例就可以看到该页面的data和function。

⚠️ 注意:小程序的页面栈最多为5层!

wx.navigateTo

用于保留当前页面、跳转到应用内的某个页面,使用 wx.navigateBack可以返回到原页面。对于页面不是特别多的小程序,通常推荐使用 wx.navigateTo进行跳转, 以便返回原页面,以提高加载速度。当页面特别多时,则不推荐使用。

wx.redirectTo

当页面过多时,被保留页面会挤占微信分配给小程序的内存,或是达到微信所限制的 5 层页面栈。这时,我们应该考虑选择 wx.redirectTo。wx.redirectTo()用于关闭当前页面,跳转到应用内的某个页面。这样的跳转,可以避免跳转前页面占据运行内存,但返回时页面需要重新加载,增加了返回页面的显示时间

wx.reLaunch

wx.reLaunch()与 wx.redirectTo()的用途基本相同, 只是 wx.reLaunch()先关闭了内存中所有保留的页面,再跳转到目标页面。

wx.switchTab

对于跳转到tabBar的页面,最好选择是wx.switchTab(),它会先关闭所有非tabBar的页面。其次,也可以选择 wx.reLaunch(),它也能实现从非tabBar跳转到tabBar,或在tabBar间跳转,效果等同wx.switchTab()。使用其他跳转 API 来跳转到tabBar,则会跳转失败。

值得注意的是:当用wx.redirectTo和wx.reLaunch从某个页面跳转到另一个页面时,小程序的左上角是不会出小返回按钮的。