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  
    });  
}
11 回复

问题已确认。已加分,感谢反馈!


您好,请问什么时候能修复

回复 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.vueonShow 生命周期中跳转到另一个页面,可能会导致目标页面的 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.reLaunchuni.switchTab 代替 uni.navigateTo

如果你希望应用启动时直接跳转到某个页面,并且不希望保留当前页面栈,可以使用 uni.reLaunchuni.switchTab 代替 uni.navigateTo

export default {
  onShow() {
    uni.reLaunch({
      url: '/pages/anotherPage/anotherPage'
    });
  }
};
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!