收藏
回答

苹果小程序页面栈BUG

如果某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 个回答

  • ؞咬了你؞F࿆ū࿆t࿆ū࿆r࿆ē࿆
    ؞咬了你؞F࿆ū࿆t࿆ū࿆r࿆ē࿆
    2021-06-17

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

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

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


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

    2021-06-17
    有用
    回复 4
    • livensi
      livensi
      2021-06-23
      我觉得我说的很清晰,你可能没太理解onshow执行了两次是什么意思。
      2021-06-23
      回复
    • ؞咬了你؞F࿆ū࿆t࿆ū࿆r࿆ē࿆
      ؞咬了你؞F࿆ū࿆t࿆ū࿆r࿆ē࿆
      2021-07-02回复livensi
      我觉得,你还是提供个最小复现的代码片段吧,打个日志或者啥的
      2021-07-02
      回复
    • 咖啡有点甜
      咖啡有点甜
      2021-09-03回复livensi
      这个问题微信官方修复了吗?tabA页面进入二级页面C,从二级页面C使用switchTab跳转至tabB页面,实际效果是会从二级页面C先回到首页,然后紧接着进入tabB页面,此时会触发两个onShow,但是顺序却是先执行了tabB的onShow,然后又执行了tabA的onShow,有点匪夷所思了
      2021-09-03
      回复
    • livensi
      livensi
      2021-11-09回复咖啡有点甜
      不知道,最近没关注这个问题
      2021-11-09
      回复
  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    2021-06-17

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

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


    2021-06-17
    有用
    回复 1
    • livensi
      livensi
      2021-06-25
      是执行了两次
      2021-06-25
      回复
登录 后发表内容