返回

从源码角度揭秘wx.reLaunch的运作机制

前端

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。