为什么扫普通二维码进入小程序页面,onLoad 执行了两次?

扫普通二维码进入小程序页面,onLoad 执行了两次,导致获取二维码中参数失败。因为只有在第一个才能拿到参数,第二次为空。

正常路径进入页面是不会执行两次的。请问大家有谁遇到这种情况。

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7539237
  • 以下回答由chatgpt基于相关博客总结生成:

    对于小程序中onLoad执行两次的情况,有可能是因为小程序框架自带的路由功能会在进入小程序时首先访问一次页面的路径,再次访问时才会执行onLoad方法。因此,建议您在onLoad方法中增加一个特殊标记,以便在第二次执行onLoad时可以判断是否已经执行过,从而避免重复执行的情况。具体操作如下:

    onLoad: function(option) {
      if(!this.isLoaded) {
        this.isLoaded = true;
        // 执行onLoad方法
        console.log(option) // 这里打印传入的二维码参数
      }
    }
    

    另外,如果您使用了自定义路由配置,建议在配置文件中加入以下代码解决onLoad执行两次的问题:

    "app": {
      "page": "pages/index/index",
      "window": {
        "backgroundTextStyle": "light",
        "navigationBarBackgroundColor": "#fff",
        "navigationBarTitleText": "Demo",
        "navigationBarTextStyle": "black"
      },
      "preloadRule": {
        "index": {
          "network": "all",
          "packages": []
        }
      },
      "usingComponents": {}
    },
    "pages": [
      {
        "path": "pages/index/index",
        "config": {
          "disableSwipeBack": true,
          "navigationBarTitleText": "首页",
          "usingComponents": {}
        }
      }
    ],
    

    其中,关键代码为 "config": {"disableSwipeBack": true},这一代码可以让小程序框架不进行路径历史记录的保存,从而解决onLoad执行两次的问题。

代码呢,你是怎么跳转的,是不是先跳转到其他页面再跳回来

app.vue 里的onload 注释一下试试