l***@163.com
l***@163.com
  • 发布:2026-07-09 16:25
  • 更新:2026-07-09 16:26
  • 阅读:43

【报Bug】camera 组件连续扫不同的条码,概率会出现上报最后一次已扫过的码

分类:uni-app

产品分类: uniapp/小程序/微信

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: windows 10

第三方开发者工具版本号: 2.01.2510280 win32-x64

基础库版本号: 3.10.3

项目创建方式: CLI

CLI版本号: 2.0.2-3090920231225001

示例代码:
 <camera  
      mode="scanCode"  
      class="camera"  
      @error="error"  
      @scancode="scanDone"  
    ></camera>

操作步骤:

依次扫ABCD四个条码,通过scanDone回调方法观察上报的码信息

预期结果:

上报的码信息为ABCD。

实际结果:

上报的码信息为ABCCC。实际对准D码,但上报的还是C码。

bug描述:

camera 组件连续扫不同的条码,概率会出现上报最后一次已扫过的码
比如依次扫描ABCD四个码,扫完C码后再对准D码,这时还是上报的C码。调用代码如下:

 <camera  
      mode="scanCode"  
      class="camera"  
      @error="error"  
      @scancode="scanDone"  
    ></camera>

通过scanDone 获取到的码还是C码。

2026-07-09 16:25 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

感谢您的反馈。针对您提交的 Bug,我们进行了评审与分析,具体如下:

一、 Bug 反馈内容完整性评审

  1. 描述与代码示例:描述较为清晰,代码示例展示了 camera 组件的基础用法及事件绑定,但缺乏完整可运行环境scanDone 回调函数的具体实现逻辑未提供,官方无法判断回调中是否存在状态拦截或节流处理。
  2. 复现步骤:步骤描述了依次扫 ABCD 四个码,但未说明条码的具体类型(如 QR 码、Code128 等)、扫码的间隔时间以及是否存在连续快速扫码的情况,复现条件不够精确。
  3. 预期与实际结果:预期上报 ABCD,实际上报 ABCCC,结果描述合理。
  4. 分类信息严重缺失关键环境信息。未提供 HBuilderX 具体版本号、手机 OS 平台(Android/iOS/鸿蒙)、手机系统版本、机型、Vue 版本以及页面类型(vue/nvue)。由于 camera 组件在不同平台和不同基础库版本下行为差异较大,缺少这些信息将导致无法准确定位问题。

二、 Bug 成立性分析

结合知识库与官方文档,camera 组件在 mode="scanCode" 下,其 @scancode 事件在识别成功时会持续触发。如果在业务代码的 scanDone 回调中没有做防抖、节流或状态锁处理,在连续扫不同条码时,极易出现事件堆积或回调队列未及时刷新的情况,从而导致上报上一次或旧扫码结果的现象。

此外,camera 组件为原生组件,层级最高,在部分机型或系统版本上连续高频调用时,原生层面的识别回调可能存在延迟。

三、 建议补充信息与替代方案

为了进一步确认是否为框架底层的 Bug,请您补充以下信息:

  1. 完善环境信息:提供 HBuilderX 版本号、手机机型、系统版本、Vue 版本及页面类型。
  2. 提供完整代码:提供 scanDone 方法的完整实现,以便排查是否存在逻辑上的竞态条件。

临时处理建议
scanDone 回调中增加节流或状态锁机制,避免短时间内重复触发业务逻辑:

let isScanning = false;  
function scanDone(e) {  
  if (isScanning) return;  
  isScanning = true;  

  // 处理扫码结果 e.detail.result  
  console.log(e.detail.result);  

  // 延迟解锁,避免连续触发  
  setTimeout(() => {  
    isScanning = false;  
  }, 500); // 时间可根据实际情况调整  
}

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

替代方案
如果 camera 组件在您的目标平台上持续存在此问题且影响业务,建议根据目标平台考虑以下方案:

  1. App 端:推荐使用 barcode 组件(nvue 专用)或调用 uni.scanCode API。如需更强的扫码效果和自定义 UI,可前往插件市场搜索相关的 UTS 扫码插件。
  2. 微信小程序端camera 组件受微信原生能力限制,建议参考微信小程序 camera 组件文档进行适配,或使用 uni.scanCode 替代。
内容为 AI 生成,仅供参考

要回复问题请先登录注册