苹果小程序页面栈BUG
发布于 3 年前 作者 zengguiying 11585 次浏览 来自 官方Issues

如果某tab页面在栈中已经存在,如果再用switchTab跳转到该页面时,该页面会触发两次,例如:onShow执行了两次!

详细描述:

【假如小程序底部有Tab-A、Tab-B、Tab-C三个页面】

复现流程一:点击Tab-C,在Tab-C中通过某个事件使用switchTab进入Tab-B,Tab-B入栈,页面显示(onShow执行一次),再次点击Tab-C,还是通过Tab-C中某个事件使用switchTab进入Tab-B,此时Tab-B在栈中已经存在,onShow执行了两次。

复现流程二:点击Tab-B,Tab-B入栈,页面显示(onShow执行一次),点击Tab-C,通过Tab-C中某个事件使用switchTab进入Tab-B,此时Tab-B在栈中已经存在,onShow执行了两次。

注:目前本人解决办法是使用reLaunch(所有页面出栈)替代了switchTab,遇到该问题并且没有更好解决办法的小伙伴不妨试试。

2 回复

切换tab时候重新执行onShow方法并没有问题,是你对生命周期的理解有偏差

onShow执行的时候是你的界面从页面栈中间到顶部就会执行,你进后台回来onShow也会执行

建议详细看看小程序关于生命周期的文档:https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/page-life-cycle.html

既然原来在onShow的逻辑只执行一次,为什么你不放在onLoad里,如果还是有东西依赖到onShow,你大可以设置个isFirstShow之类的布尔值开关来控制onShow里指定逻辑只执行一次。

页面的onShow:页面每次出现在前台时都会执行

页面的onLoad:页面的整个生命周期只执行一次

回到顶部