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 回复
HBuilderX 3.7.1.20230210-alpha 已修复。
uni.preloadPage 在 iOS 端确实存在预加载页面后,非首次切换时 onShow 生命周期无法触发的已知问题。这主要是由于 iOS 系统对页面栈管理和页面显示逻辑的差异导致的。
问题核心:预加载的页面在首次显示时被正确激活并触发 onShow,但后续在 tabbar 切换等场景中,iOS 系统可能将其视为一个“已存在且处于显示状态”的页面实例,因此不再重复触发 onShow 回调。
临时解决方案(在官方修复前可尝试):
- 使用自定义事件通信:在父页面或全局监听 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'); }

