SeasideLee
SeasideLee
  • 发布:2022-11-27 01:04
  • 更新:2023-06-28 12:57
  • 阅读:380

【报Bug】vue3 + vite 编译到微信小程序平台,当点击事件中有 setTimeout 时会导致其他点击事件延迟响应

分类:uni-app

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

PC开发环境操作系统: Windows

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

第三方开发者工具版本号: Stable 1.06.2209190

基础库版本号: 2.27.3

项目创建方式: CLI

CLI版本号: 3.0.0-alpha-3061120221125001

示例代码:
<template>  
  <button style="margin-top: 100px" @tap="plus1">+ v1: {{ v1 }}</button>  
  <button style="margin-top: 30px" @tap="plus2">+ v2: {{ v2 }}</button>  
</template>  

<script setup lang="ts">  
import { ref } from 'vue';  

const v1 = ref(0);  
const v2 = ref(0);  
const plus1 = () => {  
  v1.value++;  
};  
const plus2 = () => {  
  setTimeout(() => {  
    v2.value++;  
  }, 100);  
};  
</script>

操作步骤:

该 BUG 目前仅在 Android 端微信小程序复现。

  1. 以上面非常简单的代码示例来看,首先快速连续点击 +v1 的 button,此时 v1 的值会快速连续增长,这符合预期,没问题
  2. 然后快速连续点击 2 ~ 3 次 +v2 的 button,并立即再去快速连续点击 +v1 的 button,此时 v1 的值不会变化,直到大约 0.5s ~ 1.5s 后才会开始响应点击事件,并一次性把刚才未响应的点击事件全都补回来了,也就是延迟响应

预期结果:

延迟响应的现象不应该存在

实际结果:

延迟响应的现象现在却存在

bug描述:

2022-11-27 01:04 负责人:无 分享
已邀请:
YUANRJ

YUANRJ

您好,请问只有在真机上才能复现?

  • SeasideLee (作者)

    是的,只有在 Android 真机上复现

    2022-11-28 18:20

  • YUANRJ

    回复 SeasideLee: Android特定机型吗?

    2022-11-28 20:32

  • SeasideLee (作者)

    回复 YUANRJ: 我这边测试了 魅族16spro、华为Mate40 两款 Android 机型,都可复现此 Bug

    2022-12-01 16:10

  • SeasideLee (作者)

    回复 YUANRJ: 我也用微信小程序的原生写法进行了测试,并无出现此 Bug

    2022-12-01 16:11

  • SeasideLee (作者)

    回复 YUANRJ: 您好,请问您这边是否复现了此 Bug ?

    2022-12-07 13:57

  • SeasideLee (作者)

    回复 YUANRJ: 您好,我这边对该 bug 的复现场景进行了录屏,请看一下 https://img.hammi.cn/KQWMV4L7Nrmi71lLK3WKiw9QpjqCuwIPhgu8XyHW.mp4

    2022-12-09 15:00

  • SeasideLee (作者)

    回复 YUANRJ: 您好,请问您这边是否复现了此 Bug?麻烦请回复我一下,如果您暂时无法跟进这个 Bug,也请告知我,我便不会继续在这个帖子下回复了

    2022-12-15 14:08

  • YUANRJ

    回复 SeasideLee: 您好,我这边暂时未复现此问题,我让我同事这边再排查一下

    2022-12-15 18:02

  • SeasideLee (作者)

    回复 YUANRJ: 好的,感谢,请看一下我上面发的录屏,是比较典型的复现场景

    2022-12-16 11:28

  • SeasideLee (作者)

    回复 YUANRJ: 您好,请问您同事有复现此 Bug 吗?我这边又用更多的 Android 手机进行了测试,都复现了此 Bug

    2022-12-23 13:44

  • SeasideLee (作者)

    回复 YUANRJ: 您好,请问关于这个 bug 有任何进展吗?

    2022-12-27 14:12

  • YUANRJ

    回复 SeasideLee: 感谢反馈,已记录问题。

    2022-12-27 17:17

YUANRJ

YUANRJ

您好,加上这个属性data-eventsync="true"试一下呢,https://uniapp.dcloud.net.cn/tutorial/migration-to-vue3.html#vue3-项目部分小程序端事件延迟或调用失败

  • SeasideLee (作者)

    我尝试在 v1 和 v2 两个 button 上都加了 data-eventsync="true",这样做之后 v1 的点击事件总是能立即响应(正常了),但快速连续点击 v2 时,其点击事件还是会延迟响应,与录屏中的表现无差别

    2023-01-01 00:41

YUANRJ

YUANRJ

您好,经过反复验证,此问题是安卓底层的问题,暂无法解决。 先加上data-eventsync="true"

  • SeasideLee (作者)

    感谢你们对这个问题的重视,但我测试过用微信小程序的原生写法来写的话,并不会出现此 Bug,由于我未曾对 uni-app 源码进行过深入研究,我目前也无法提供进一步的有效信息了。我还是先加上 data-eventsync="true"

    2023-01-03 16:51

不如摸鱼去

不如摸鱼去 - 一个前端打工仔。如果我的回答对你产生了帮助,还请给个star: https://github.com/Moonofweisheng

只有在使用vue3开发在微信端使用setTimeout的时候会有这个问题,setTimeout响应并不准确,会延迟,希望uni-app可以解决一下这个问题

  • YUANRJ

    微信小程序吗

    2023-06-28 14:16

  • 不如摸鱼去

    回复 YUANRJ: 是的,我之前写transition动画,用setTimeout来改变不同状态的class,微信小程序动画会明显卡顿,调试下来是setTimeout执行不准确,目前我是在微信端使用wxs中的setTimeout或者requestAnimationFrame来避免这个问题,在其他的小程序中,这个问题不明显,微信小程序中十分明显

    2023-06-28 15:25

  • YUANRJ

    回复 不如摸鱼去: 你可以向微信小程序社区反馈下

    2023-06-28 15:57

  • 不如摸鱼去

    回复 YUANRJ: 但是使用vue2开发的时候,这个问题并不明显。

    2023-06-28 16:17

  • 不如摸鱼去

    回复 YUANRJ: 不确定这个问题是如何产生的

    2023-06-28 16:17

要回复问题请先登录注册