uni-app HBuilder 运行至APP 开启 uni调试 无法正常给globalData赋值 提示undefined 关闭 uni调试正常

发布于 1周前 作者 eggper 来自 Uni-App

uni-app HBuilder 运行至APP 开启 uni调试 无法正常给globalData赋值 提示undefined 关闭 uni调试正常

# 产品分类
uniapp/App

| 信息类别 | 详细信息 |
| --- | --- |
| PC开发环境操作系统 | Mac |
| PC开发环境操作系统版本号 | 14.2.1 |
| HBuilderX类型 | 正式 |
| HBuilderX版本号 | 4.11 |
| 手机系统 | iOS |
| 手机系统版本号 | iOS 17 |
| 手机厂商 | 模拟器 |
| 手机机型 | iPhone |
| 页面类型 | vue |
| vue版本 | vue2 |
| 打包方式 | 云端 |
| 项目创建方式 | HBuilderX |

## 示例代码:
```cpp
// 这是在某个页面按钮的点击事件  不是onLoad或onLaunch的时候
getApp().globalData.system = this.systemInfo;

// 这个时候如果开启了uni/uvue调试面板,则会提示system undefined(换了别的变量名称也是一样),但关闭了调试面板,是跟之前一样正常运行的,

操作步骤:

HBuilder 运行至APP,开启 uni调试 无法正常给globalData赋值,提示undefined,关闭 uni调试是正常的
getApp().globalData.system = this.systemInfo;
调试面板版本 0.0.145

预期结果:

正常不报错

实际结果:

报undefined错误

bug描述:

HBuilder 运行至APP,开启 uni调试 无法正常给globalData赋值,提示undefined,关闭 uni调试是正常的
调试面板版本 0.0.145


6 回复

感谢反馈,我按照操作步骤试了一下,没能复现所描述的问题。请上传一下可复现的demo工程,我好排查一下


一样的情况,我的mac版本是12.7.4,HBuilder X版本是4.14。 index.vue里取getApp().globalData为undefined。把JS调试取消掉就又行了。

同样的情况,HBuilder X版本是4.15;getApp()能获取到对象,但是里面没有globalData,同样的关掉调试就没问题

HbuilderX 4.24 也有这个问题。半年前开发其它移动项目调试时没有这个问题,随着后续的更新也不知道具体哪个版本开始就不行了,目前的最新版是不好使的。通过 log 观察,通过 getApp() 获取的实例身上并没有 globalData 这个属性,官方何时能够解决…… 有点耽误项目调试

4.36,也有这个问题以前版本调试没问题现在调试就报错,关掉就正常

针对你提到的在使用uni-app开发过程中,通过HBuilder运行至APP时,开启uni调试导致globalData无法正常赋值,而关闭uni调试则正常的问题,这通常是由于调试模式下某些变量或生命周期钩子行为不一致所导致的。下面提供一个基本的代码示例和可能的解决方案,帮助你理解和解决这个问题。

基本代码示例

首先,确保你的App.vue文件中正确定义了globalData,并在适当的位置进行赋值。

<script>
export default {
  onLaunch: function () {
    // #ifdef APP-PLUS
    // 判断平台,仅在APP平台下设置globalData
    if (!this.globalData) {
      this.globalData = {
        userInfo: null,
        token: '',
        // 其他全局变量
      };
    }
    // 示例:在启动时从本地存储读取token
    const storedToken = uni.getStorageSync('token');
    if (storedToken) {
      this.globalData.token = storedToken;
    }
    // #endif
  },
  globalData: {
    // 初始化globalData对象
  }
}
</script>

可能的解决方案

  1. 确保globalData在onLaunch中初始化: 如上面的代码所示,globalData的初始化应放在onLaunch生命周期钩子中,并确保在访问前已正确初始化。

  2. 检查调试模式下的生命周期钩子: 在调试模式下,某些生命周期钩子可能执行顺序不同或执行次数不同。你可以通过打印日志来检查这些钩子的执行情况。

  3. 使用Vuex或Pinia进行状态管理: 如果globalData的使用变得复杂或难以管理,考虑使用Vuex或Pinia这样的状态管理工具,它们提供了更强大的状态管理功能和调试支持。

  4. 清理调试缓存: 有时,调试缓存可能导致不一致的行为。尝试清理HBuilder的缓存或重启HBuilderX,然后重新运行项目。

  5. 检查uni-app和HBuilderX的版本: 确保你使用的uni-app和HBuilderX都是最新版本,因为旧版本可能包含已知的bug。

  6. 联系uni-app社区: 如果问题依然存在,考虑在uni-app的官方社区或GitHub仓库中寻求帮助,可能有其他开发者遇到了类似的问题。

通过上述步骤,你应该能够定位并解决在uni调试模式下globalData无法正常赋值的问题。

回到顶部