uni-app uni.preloadpage无法触发onshow周期

uni-app uni.preloadpage无法触发onshow周期

信息类别 内容
产品分类 uniapp/App
PC开发环境 Mac
PC版本号 macos 15.4
开发工具类型 正式
开发工具版本 3.2.10
手机系统 iOS
手机版本号 iOS 12.4
手机厂商 苹果
手机机型 iphone7
页面类型 nvue
打包方式 云端
项目创建方式 HBuilderX

操作步骤:

调用uni.preloadPage({ url: ‘/pages/My/index’ }) 然后切换tabbar 显示第一次之后都无法触发onshow

预期结果:

切换能触发onshow周期

实际结果:

切换第一次后不能触发onshow周期。 安卓端的可以

bug描述:

uni.preloadpage加载页面后 iOS第一次显示页面能触发onshow 之后切换显示都无法触发onshow周期 只有onhide可以触发

相关链接:


更多关于uni-app uni.preloadpage无法触发onshow周期的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

兄弟解决了吗

更多关于uni-app uni.preloadpage无法触发onshow周期的实战教程也可以访问 https://www.itying.com/category-93-b0.html


HBuilderX 3.7.1.20230210-alpha 已修复。

uni.preloadPage 在 iOS 端确实存在预加载页面后,非首次切换时 onShow 生命周期无法触发的已知问题。这主要是由于 iOS 系统对页面栈管理和页面显示逻辑的差异导致的。

问题核心:预加载的页面在首次显示时被正确激活并触发 onShow,但后续在 tabbar 切换等场景中,iOS 系统可能将其视为一个“已存在且处于显示状态”的页面实例,因此不再重复触发 onShow 回调。

临时解决方案(在官方修复前可尝试):

  1. 使用自定义事件通信:在父页面或全局监听 tabbar 切换事件(如 onTabItemTap),通过 uni.$emit 发送显示通知。在预加载的目标页面使用 uni.$on 监听该事件,并在回调中执行原本应在 onShow 中的逻辑。
    // 在触发切换的页面(如 tabbar 页)
    onTabItemTap() {
      uni.$emit('pageShow', { page: '/pages/My/index' });
    }
    
    // 在预加载的页面(/pages/My/index)
    onLoad() {
      uni.$on('pageShow', (data) => {
        if (data.page === this.$page.route) {
          // 执行原 onShow 逻辑
        }
      });
    }
    onUnload() {
      uni.$off('pageShow');
    }
回到顶部