uni-app APP第一次启动时 App.vue onShow中跳转到另一个页面 另一个页面的onLoad执行两次
uni-app APP第一次启动时 App.vue onShow中跳转到另一个页面 另一个页面的onLoad执行两次
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | 21H1 | HBuilderX |
Android | Android 11 | OPPO |
OPPO FINX X2 | ||
Vue | vue2 |
产品分类:uniapp/App
PC开发环境操作系统:Windows
HBuilderX类型:正式
HBuilderX版本号:3.3.13
手机系统:Android
手机系统版本号:Android 11
手机厂商:OPPO
手机机型:OPPO FINX X2
页面类型:vue
打包方式:云端
项目创建方式:HBuilderX
操作步骤:
let args = '{"loginId":"9999"}';
if (args.indexOf('loginId') > -1) {
let argsObj = eval('(' + args + ')');
uni.navigateTo({
url: 'pages/index/main?loginId='+argsObj.loginId
});
}
问题已确认。已加分,感谢反馈!
您好,请问什么时候能修复
回复 y***@163.com: 不推荐在onShow中去跳转页面。很容易触发这个问题。推荐去别的生命周期内去打开页面onLoad、onLaunch等
回复 BoredApe: onLaunch中也有这个问题
回复 y***@163.com: 我的也有这个问题
回复 BoredApe: onLaunch中也有这个问题 亲 刚发现的
回复 BoredApe: 我找到问题了 我的是不能用uni.reLaunch打开新页面 用其他都可以 用这就会让打开的页面执行两次
https://uniapp.dcloud.io/tutorial/app-ios-schemes.html
你们文档上不是建议在onShow处理跳转到别的页面的吗???
这个问题有修复吗,现在还有这个问题
我也出现了这个问题onShow onLoad onMounted都会执行两次
在 uni-app
中,如果你在 App.vue
的 onShow
生命周期中跳转到另一个页面,可能会导致目标页面的 onLoad
生命周期被触发两次。这种情况通常是由于 onShow
生命周期被多次触发,或者页面跳转逻辑被多次执行导致的。
以下是一些可能的原因和解决方案:
1. onShow
生命周期被多次触发
onShow
生命周期在页面显示时会被触发,而在应用启动时,onShow
可能会被多次触发,尤其是在应用从后台切换到前台时。
解决方案:
你可以在 onShow
中添加一个标志位,确保跳转逻辑只执行一次。
export default {
data() {
return {
hasJumped: false
};
},
onShow() {
if (!this.hasJumped) {
this.hasJumped = true;
uni.navigateTo({
url: '/pages/anotherPage/anotherPage'
});
}
}
};
2. 页面跳转逻辑被多次执行
如果你在 onShow
中直接调用 uni.navigateTo
,可能会导致跳转逻辑被多次执行,尤其是在应用启动时。
解决方案:
你可以使用 setTimeout
延迟执行跳转逻辑,确保跳转只执行一次。
export default {
onShow() {
setTimeout(() => {
uni.navigateTo({
url: '/pages/anotherPage/anotherPage'
});
}, 0);
}
};
3. 目标页面的 onLoad
被多次触发
如果目标页面的 onLoad
被多次触发,可能是因为页面被多次加载。你可以检查目标页面的代码,确保没有重复加载的逻辑。
解决方案:
在目标页面中,你可以添加日志或调试信息,检查 onLoad
被触发的原因。
export default {
onLoad(options) {
console.log('Page loaded with options:', options);
}
};
4. 使用 uni.reLaunch
或 uni.switchTab
代替 uni.navigateTo
如果你希望应用启动时直接跳转到某个页面,并且不希望保留当前页面栈,可以使用 uni.reLaunch
或 uni.switchTab
代替 uni.navigateTo
。
export default {
onShow() {
uni.reLaunch({
url: '/pages/anotherPage/anotherPage'
});
}
};