EJRUN以界
EJRUN以界
  • 发布:2022-10-11 09:03
  • 更新:2022-10-27 21:05
  • 阅读:3783

【报Bug】uniapp 编译到 APP click 点击事件无效

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

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

HBuilderX类型: 正式

HBuilderX版本号: 3.6.4

手机系统: Android

手机系统版本号: Android 9.0

手机厂商: 华为

手机机型: 荣耀9

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

操作步骤:

复现方法:

1、做一个组件 A ,A emit("click")

2、做一个页面 ,在其中 用 v-if 使用组件A ,比如 <A v-if="condition" @click="myclick" />

3、首次进入页面时,点击A ,myclick 事件会被触发,当v-if == false ,组件被隐藏,然后 v-if == true 组件再显现时,myclick 事件就无法触发了。

4、一定要用 自定义组件 A ,如果一次切换v-if 状态 不能复现,反复切换 vif 状态几次,问题必定会重现。

5、如果用 uniapp 内置组件 view 绑定 click ,就没有这个问题

6、可能原因分析:v-if == false 时,组件被销毁。当 v-if == true 组件再次被创建时,@ 要绑定的事件,没有被正确绑上,所以就出现点击无效。不仅仅是 click 无效,所有绑定在该组件上的事件响应函数,全部无效。

预期结果:

通过 @绑定在 组件上的 事件响应函数被 调用

实际结果:

通过 @绑定在 组件上的 事件响应函数 没有调用

bug描述:

uniapp 编译到 app 后,click 事件仍会失效。估计这是一个隐藏了多年的底层逻辑bug。

原因分析:不是click 失效,而是 组件 的 emit 事件 ,页面无法捕捉。

复现方法:

1、做一个组件 A ,A emit("click")

2、做一个页面 ,在其中 用 v-if 使用组件A ,比如 <A v-if="condition" @click="myclick" />

3、首次进入页面时,点击A ,myclick 事件会被触发,当v-if == false ,组件被隐藏,然后 v-if == true 组件再显现时,myclick 事件就无法触发了。

4、一定要用 自定义组件 A ,如果一次切换v-if 状态 不能复现,反复切换 vif 状态几次,问题必定会重现。

5、如果用 uniapp 内置组件 view 绑定 click ,就没有这个问题

6、可能原因分析:v-if == false 时,组件被销毁。当 v-if == true 组件再次被创建时,@ 要绑定的事件,没有被正确绑上,所以就出现点击无效。不仅仅是 click 无效,所有绑定在该组件上的事件响应函数,全部无效。

2022-10-11 09:03 负责人:无 分享
已邀请:
DCloud_UNI_Anne

DCloud_UNI_Anne

HBuilderX3.6.8-alpha已修复

DCloud_UNI_Anne

DCloud_UNI_Anne

EJRUN以界

EJRUN以界 (作者)

你好,附件中 有 bug 复现的 演示 工程。请查看。谢谢。

EJRUN以界

EJRUN以界 (作者)

我再传一次试试

  • DCloud_UNI_Anne

    Android 11 Redmi K40 ,未复现问题,请简单代码提供最小可复现示例(上传附件)

    2022-10-18 15:28

  • EJRUN以界 (作者)

    回复 DCloud_UNI_Anne:你好,明天我们换另外一个安卓机试试,如果能够复现,录个视频上传。

    2022-10-18 23:10

  • EJRUN以界 (作者)

    回复 DCloud_UNI_Anne: 你好,刚用 Redmi Note 10 ,Android 11 ,MIUI 12.0.8 测试,可以稳定重现bug。

    2022-10-18 23:25

  • DCloud_UNI_Anne

    回复 EJRUN以界: 复现此问题,这边相关人员排查下 ,已加分感谢您的反馈!

    2022-10-19 15:03

EJRUN以界

EJRUN以界 (作者)

还是原来附件中的 代码 。 请运行到 Android 真机后,按 图片 中 提示的 1、2、3 步顺序进行操作看看。谢谢。

EJRUN以界

EJRUN以界 (作者)

早上起来,把 bug_demo 简化到 只有 2个函数,几行代码。请查看附件中 bug_demo2 。

DCloud_UNI_GSQ

DCloud_UNI_GSQ

经排查,销毁App端根节点会导致此问题,后续将会修复

临时解决办法:增加一层节点

<template>  
    <view class="root">  
        <view v-if="canShow">  
            <demo @cClick="cClick" class="buttomM"></demo>  
            <button @click="button1()" class="buttomM">点击这个按钮几次,使组件click失效</button>  
            <text class="buttomtext"> 编译到安卓 真机运行 复现bug</text>  
        </view>  
    </view>  
</template>

要回复问题请先登录注册