前言
- 用户退出登录,需要清空所有页面状态
- 切换账号,需要销毁旧页面栈并跳转到登录页
- 业务异常 / Token 过期,需要强制重置小程序环境
如果频繁使用 wx.navigateTo,对页面栈残留、数据污染、状态不同步问题时束手无策。
一、wx.reLaunch 重启式重置(最推荐)
核心逻辑:关闭所有页面 → 打开新页面 → 全新页面栈相当于小程序冷启动重置。
底层做了什么
-
清空所有历史页面栈(pages stack)
-
销毁所有页面实例(onUnload 触发)
-
重新渲染目标页面
-
页面栈长度 = 1
优点 -
真正彻底重置,无任何页面残留
-
清空所有页面状态、data、定时器、监听
-
逻辑最简单,一行代码解决
-
适合退出登录、切换账号、强制重置
缺点 -
会出现页面闪屏(因为销毁重建),当然加上友好的提示框显示,可以完全忽略这个问题,
-
部分自定义导航栏会短暂闪烁
-
无法保留任何页面状态
// 退出登录 → 跳登录页,彻底重置
wx.reLaunch({
url: '/pages/login/login'
})
方案 2:静默清理(不跳转路由,纯数据重置)
核心逻辑:不跳转页面,只手动清空全局数据 + 页面数据。
底层做了什么
- 清空 getApp().globalData
- 清空当前页面 this.setData
- 清除定时器、监听、eventChannel
- 清空 Storage 敏感信息
优点
- 无闪屏,体验丝滑
- 不改变页面栈
- 适合轻量级刷新
缺点
- 容易漏清理,导致数据残留
- 页面多了维护成本极高
- 无法销毁隐藏页面的状态