uni-app 项目升级到 VUE3 后 getSystemInfoSync 不能用了

uni-app 项目升级到 VUE3 后 getSystemInfoSync 不能用了

开发环境 版本号 项目创建方式
Mac macOS Big Sur 11.2.3 HBuilderX

操作步骤:

  1. 新建一个uni-app 的项目,使用默认模板
  2. 在配置中把VUE版本选择为3
  3. 在APP.vue 的onLaunch 方法内,添加了语句 let isIos = uni.getSystemInfoSync().platform == 'ios';

预期结果:

正常结果

实际结果:

在控制台报错

VM313:5 app.js错误:
TypeError: Cannot read property 'getSystemInfoSync' of undefined
at initLocale (uni.mp.esm.js?97ff:571)
at parseApp (uni.mp.esm.js?97ff:552)
at createApp (uni.mp.esm.js?97ff:567)
at Object.mount (vue.runtime.esm.js?dc04:4890)
at Object.<anonymous> (main.js? [sm]:21)
at __webpack_require__ (null:81)
at checkDeferredModules (null:47)
at Array.webpackJsonpCallback [as push] (null:34)
at main.js:4
at p (VM280 WAService.js:2)(env: macOS,mp,1.05.2110110; lib: 2.20.0)  

更多关于uni-app 项目升级到 VUE3 后 getSystemInfoSync 不能用了的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

相关组将会排查此问题,已加分,感谢您的反馈!

更多关于uni-app 项目升级到 VUE3 后 getSystemInfoSync 不能用了的实战教程也可以访问 https://www.itying.com/category-93-b0.html


问题已修复,请升级到HBuilder X 3.2.12

在 Vue3 项目中,uni.getSystemInfoSync() 需要在应用初始化完成后调用。在 onLaunch 中直接使用可能导致 uni 对象尚未完全初始化。

解决方案:

  1. 使用 nextTick 延迟调用
import { nextTick } from 'vue'

onLaunch(() => {
  nextTick(() => {
    let isIos = uni.getSystemInfoSync().platform == 'ios'
    console.log(isIos)
  })
})
  1. 使用 onShow 替代 onLaunch
onShow(() => {
  let isIos = uni.getSystemInfoSync().platform == 'ios'
  console.log(isIos)
})
  1. 使用异步版本 getSystemInfo
onLaunch(() => {
  uni.getSystemInfo({
    success: (res) => {
      let isIos = res.platform == 'ios'
      console.log(isIos)
    }
  })
})
回到顶部