uni-app 编译出来的字节小程序首次进入页面 onShow 不触发

uni-app 编译出来的字节小程序首次进入页面 onShow 不触发

开发环境 版本号 项目创建方式
Mac Monterey 12.1 HBuilderX

操作步骤:

写一个最基本的demo,在onShow中console.log,编译成字节小程序在开发者工具中运行即可复现

预期结果:

与其他小程序表现一致

实际结果:

首次进入页面不触发onShow,第二次进入页面才触发onShow

bug描述:

编译出来的字节小程序首次进入页面不触发onShow,第二次进入页面才触发onShow。同一套代码编译成微信、支付宝、百度、qq都表现正常。且用字节原生写的可以触发。


更多关于uni-app 编译出来的字节小程序首次进入页面 onShow 不触发的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

测试正常,未复现此问题

更多关于uni-app 编译出来的字节小程序首次进入页面 onShow 不触发的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个已知的字节小程序平台差异问题。字节小程序在页面初始加载时,onShow 的触发时机与其他平台不同。首次进入页面时,字节小程序会先执行 onLoad,然后直接执行 onReady,而 onShow 会在页面显示后(例如第二次进入或从后台切回时)才触发。

解决方案:

  1. 将首次逻辑移到 onLoad
    如果需要在页面首次加载时执行某些操作,建议将这些逻辑放在 onLoad 生命周期中,而不是依赖 onShow

  2. 使用条件判断处理首次加载
    可以在 onShow 中通过判断是否首次加载来执行相应逻辑:

    onShow() {
      if (!this.hasShown) {
        this.hasShown = true;
        // 首次进入页面的逻辑
        console.log('首次触发 onShow');
      }
      // 其他每次显示都会执行的逻辑
    },
    onLoad() {
      this.hasShown = false;
    }
回到顶部