ReferenceError: wx is not defined

这段代码报错的核心原因出在以下这行:

ini 复制代码
var windWidth = wx.getSystemInfoSync().windowWidth;

这行代码在组件外部顶层直接调用了 wx.getSystemInfoSync(),而 在组件被初始化之前、或者不是在微信小程序环境中执行这段代码时,wx 是未定义的,所以就抛出了 ReferenceError: wx is not defined


✅ 正确的解决方式

✅ 方法一:将 wx.getSystemInfoSync() 放入组件的生命周期或 attached() 生命周期中执行

微信组件初始化时才能确保 wx 是定义好的,避免在顶层作用域使用:

✅ 修改方式如下:

php 复制代码
Component({
  properties: {
    canvasWidth: {
      type: Number,
      value: 0  // 先设置为 0,稍后在 attached 中设置
    },
    ...
  },
  data: {
    show_tip: true
  },
  lifetimes: {
    attached() {
      const windWidth = wx.getSystemInfoSync().windowWidth;
      this.setData({
        canvasWidth: windWidth * 0.4
      });
    }
  },
  methods: {
    ...
  }
});

✅ 方法二:在调用之前判断 typeof wx !== 'undefined'

如果一定要保留顶层代码(不推荐),可以做个安全判断:

ini 复制代码
var windWidth = (typeof wx !== 'undefined') ? wx.getSystemInfoSync().windowWidth : 375;

但是更推荐的方法还是:不要在组件外部或组件定义顶层作用域中直接使用 wx


🔧 补充:canvas 使用小程序 2D 环境注意事项

在你这段 canvas-ring.js 中,如果你使用的是 canvas 标签(不是 canvas-id) + type="2d" 的方式来绘图,确保使用了 自定义组件 + canvas 2d 环境 并启用了 2D 接口。

你在使用:

kotlin 复制代码
query.select('#myCanvas')
  .fields({ node: true , size: true})
  .exec(this.init.bind(this));

说明你是使用了 canvasnode 接口,这就必须保证:

  • 你的小程序基础库版本 ≥ 2.9.0
  • <canvas type="2d" /> 用在 wxml
  • component: true 设置在页面或组件配置中(如果使用自定义组件)

✅ 总结

错误来源:

在组件外直接调用 wx.getSystemInfoSync(),而此时微信小程序环境尚未准备好。

解决办法:

wx.getSystemInfoSync() 放到 attached() 生命周期中再执行


相关推荐
汤姆yu8 小时前
基于微信小程序的晚托机构管理系统
微信小程序·小程序·晚托
凡泰AI10 小时前
如何通过小程序多端框架,让一个小程序同时运行在iOS、安卓、鸿蒙和微信客户端,实现开发层面的降本增效
android·ios·微信小程序·小程序·harmonyos
andrsted1 天前
在线刷小程序推荐
学习·微信小程序·小程序·学习方法
Mark108591 天前
【踩坑】Uni-app微信小程序自定义组件在 Flex 布局中未铺满整行
微信小程序·小程序·uni-app
2601_963870211 天前
【计算机毕业设计】基于微信小程序的电子家谱的设计与实现
微信小程序·小程序·课程设计
andrsted2 天前
老师可以用小程序在线整理题库、课堂检测和错题集
学习·微信小程序·小程序·学习方法
学习星球3 天前
AI Agent 成本工程实战:从 OpenAI Codex 的 8 个“烧 Token“Bug 学起
人工智能·设计模式·微信小程序
律宏阔3 天前
微信小程序使用 Orval + OpenAPI 自动生成接口:Axios 兼容踩坑记录
前端·微信小程序
律宏阔3 天前
微信小程序集成 TDesign 完整记录:解决 NPM packages not found
前端·微信小程序
律宏阔3 天前
微信小程序 ECharts 瘦身实战:分包异步化 + componentPlaceholder 避开主包 2MB 限制
前端·微信小程序