uni-app uni.preloadPage 预加载tabbar首页时,首页onReady会触发两次
uni-app uni.preloadPage 预加载tabbar首页时,首页onReady会触发两次
测试过的手机:
小米10,红米 note7,iphoneX
示例代码:
uni.preloadPage({
url: "pages/test/test1",
complete(err) {
console.log('预加载成功' + JSON.stringify(err));
// #ifdef APP-PLUS
plus.navigator.setStatusBarStyle('dark')
// #endif
},
fail(err) {
console.log('预加载失败' + JSON.stringify(err))
}
})
操作步骤:
下载附件代码,然后运行,不管是标准运行基座还是自定义基座,onReady都会执行两次,这导致我实际项目里的请求也触发了两次。
预期结果:
预加载的页面onReady只触发一次
实际结果:
onReady会触发两次
bug描述:
在app.vue的onLaunch里预加载了tabbar首页,在onready中打印日志,发现会打印两次。此项目我已精简到只有三个测试页面,方便你们查看,这个问题困扰很久了,希望能帮我看看,谢谢了
| 信息类别 | 内容 |
|------------------|------------------------------------|
| 产品分类 | uniapp/App |
| PC开发环境操作系统 | Mac |
| PC开发环境操作系统版本号 | macOS Big Sur 11.1 |
| HBuilderX类型 | 正式 |
| HBuilderX版本号 | 3.0.7 |
| 手机系统 | 全部 |
| 手机厂商 | 华为 |
| 页面类型 | nvue |
| 打包方式 | 云端 |
| 项目创建方式 | HBuilderX |
更多关于uni-app uni.preloadPage 预加载tabbar首页时,首页onReady会触发两次的实战教程也可以访问 https://www.itying.com/category-93-b0.html
示例项目
更多关于uni-app uni.preloadPage 预加载tabbar首页时,首页onReady会触发两次的实战教程也可以访问 https://www.itying.com/category-93-b0.html
问题已记录,已加分,感谢您的反馈!
嗯嗯,暂时先用缓存定义了一个flag解决了这个问题
使用uniapp框架,微信小程序如何实现页面预加载呢?
这是一个已知的uni-app预加载页面时的生命周期触发问题。在预加载tabbar首页时,确实会出现onReady被调用两次的情况。
原因分析:
- 预加载页面时,框架会先初始化页面实例
- 当实际切换到该tabbar页面时,会再次触发完整的生命周期
解决方案:
- 可以在页面中添加一个标志变量来避免重复执行:
let hasReady = false
onReady() {
if(hasReady) return
hasReady = true
// 你的初始化代码
}
-
或者考虑将初始化逻辑放在onLoad中执行,因为onLoad通常只会触发一次
-
如果必须在onReady中执行,可以使用防抖处理:
let readyTimer = null
onReady() {
clearTimeout(readyTimer)
readyTimer = setTimeout(() => {
// 你的初始化代码
}, 100)
}