从源码角度揭秘wx.reLaunch的运作机制
2023-09-19 09:39:16
wx.reLaunch 的前世今生
在理解 wx.reLaunch 的运作机制之前,我们先来回顾一下它的历史。在小程序的早期版本中,并没有 wx.reLaunch 这个 API。当时,开发者只能使用 wx.redirectTo 和 wx.navigateTo 两个 API 来进行页面跳转。
- wx.redirectTo :将当前页面从栈中移除,并跳转到新页面。
- wx.navigateTo :将当前页面压入栈中,并跳转到新页面。
这两个 API 都存在一定的局限性。wx.redirectTo 会导致当前页面无法返回,而 wx.navigateTo 会导致页面栈越来越深,影响性能。
为了解决这些问题,微信团队在小程序的后续版本中引入了 wx.reLaunch API。wx.reLaunch 结合了 wx.redirectTo 和 wx.navigateTo 的优点,它既可以将当前页面从栈中移除,又不会导致页面栈越来越深。
wx.reLaunch 的工作原理
wx.reLaunch 的工作原理其实很简单。它首先会将当前页面从栈中移除,然后将新页面压入栈中。接下来,它会调用新页面的 onLoad() 方法。
需要注意的是,wx.reLaunch 会导致所有正在执行的异步操作被取消。因此,如果你在当前页面中使用了 setTimeout() 或 setInterval() 等异步操作,你需要在重新启动小程序后重新调用这些方法。
wx.reLaunch 的参数设置
wx.reLaunch 的参数设置非常简单,它只有一个参数:url。url 参数指定了要跳转到的新页面的路径。
wx.reLaunch({
url: '/pages/index/index'
});
wx.reLaunch 的常见注意事项
在使用 wx.reLaunch 时,你需要注意以下几点:
- wx.reLaunch 会导致所有正在执行的异步操作被取消 。因此,你需要在重新启动小程序后重新调用这些方法。
- wx.reLaunch 无法跳转到其他小程序 。如果要跳转到其他小程序,你需要使用 wx.navigateToMiniProgram() API。
- wx.reLaunch 无法跳转到小程序的 tabBar 页面 。如果要跳转到小程序的 tabBar 页面,你需要使用 wx.switchTab() API。
wx.reLaunch 的应用场景
wx.reLaunch 可以应用于多种场景,比如:
- 用户退出登录 :当用户退出登录时,可以使用 wx.reLaunch 跳转到登录页面。
- 用户切换账号 :当用户切换账号时,可以使用 wx.reLaunch 跳转到登录页面。
- 用户注销账号 :当用户注销账号时,可以使用 wx.reLaunch 跳转到注销成功页面。
- 用户重置密码 :当用户重置密码时,可以使用 wx.reLaunch 跳转到重置密码成功页面。
总结
wx.reLaunch 是微信小程序中常用的跳转方式,它既可以将当前页面从栈中移除,又不会导致页面栈越来越深。在使用 wx.reLaunch 时,你需要注意以下几点:
- wx.reLaunch 会导致所有正在执行的异步操作被取消。因此,你需要在重新启动小程序后重新调用这些方法。
- wx.reLaunch 无法跳转到其他小程序。如果要跳转到其他小程序,你需要使用 wx.navigateToMiniProgram() API。
- wx.reLaunch 无法跳转到小程序的 tabBar 页面。如果要跳转到小程序的 tabBar 页面,你需要使用 wx.switchTab() API。