React警告滚动阻塞“touchstart”的非被动事件侦听器

2023-12-19

我有一个带有 Material-ui Slider 的 React 组件。 每次渲染此组件时,我都会收到此警告: “向滚动阻塞‘touchstart’事件添加了非被动事件侦听器。考虑将事件处理程序标记为‘被动’以使页面响应更快”

如何解决这个问题?


许多库和框架默认添加非被动事件侦听器。您对此无能为力。我建议使用高度灵活和可配置的方式,而不是等待支持被动事件支持 https://www.npmjs.com/package/passive-events-support包来调试并使事件侦听器被动,而无需接触第 3 方源代码。

首先,安装包后调试触摸和滚轮事件侦听器及其参数:

import { passiveSupport } from 'passive-events-support/src/utils'
passiveSupport({ debug: true })

这应该控制台记录所有事件侦听器

[Passive Events Support] Non-passive Event Listener
  element: div.some-element
  event: 'touchstart'
  handler:
    fn: ƒ (e)
    fnArgument: 'e'
    fnContent: 'console.log(e)'
    fnPrevented: false
  arguments: false

Notice arguments参数,如果是false, undefined或没有对象passive参数内,此事件会导致浏览器引发警告并影响滚动性能。

要修复它,只需使用包和记录的信息来使这个确切的事件侦听器成为被动的:

import { passiveSupport } from 'passive-events-support/src/utils'
passiveSupport({
  debug: false,
  // add this one
  listeners: [
    {
      element: 'div.some-element',
      event: 'touchstart'
    }
  ]
})

不过要小心,调用的事件侦听器preventDefault()不应标记为被动,但要修复警告仍应具有passive参数值为false反而。

默认情况下,包将检查处理程序本身是否阻止了事件侦听器,但如果处理程序内部调用的方法阻止了事件侦听器,则包将失去对它的跟踪。强制分配passive: false只是通过prevented: true参数为listeners item:

passiveSupport({
  //...
  listeners: [
    {
      element: 'div.some-element',
      event: 'touchstart',
      prevented: true
    }
  ]
})

对我来说,这个包修复了由 Materialize 和 jquery 引起的所有警告。希望它也对您有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React警告滚动阻塞“touchstart”的非被动事件侦听器 的相关文章

随机推荐

  • 垂直分屏自定义形状

    I want to make a vertical split screen with a custom shape like in my attached image But it must be cross browser suppor
  • JavaScriptSerializer 将对象“集合”反序列化为对象失败的属性

    我有一个 js 对象 结构如下 object property1 some string object property2 some string object property3 property1 some string object
  • 复制整个目录但排除一些文件 php

    试图找到一种复制整个目录但排除某些文件的方法 在这种情况下只需要排除一个始终只包含 1 个 png 文件的目录 我想可以使用类似于此代码的内容 但绝对没有任何线索如何仅排除一个文件 function xcopy source dest pe
  • 堆地址范围内全局变量的地址

    我正在调试MPlayer 1 3 0源代码 我看到一个全局变量 其地址 由GDB甚至简单的打印 都在堆分配的范围内 而不是数据部分 我使用检查了堆范围procfs 555555554000 555555834000 r xp 0000000
  • Firefox VIEW SOURCE 显示登录页面

    我在 Arch Linux 上运行 Firefox 61 0 查看页面源代码时 当我浏览需要登录的网站时 我经常 但并非总是如此 估计有 20 的时间 会看到登录页面的源代码 当我浏览本地主机 每个页面的源代码都是在服务器上生成的 这不是操
  • 你能在 Python 中的核心类型上猴子修补方法吗?

    Ruby 可以向 Number 类和其他核心类型添加方法以获得如下效果 1 should equal 1 但Python似乎无法做到这一点 这是真的 如果是这样 为什么 这是否与以下事实有关 type不能修改吗 我不想讨论猴子修补的不同定义
  • 如何在 obj-c 中打印格式化的浮点数?

    如何打印float在 Objective C 中 例如 3 45代替3 45555555555 尝试像这样格式化浮动 NSLog 2f myFloat The 符号表示这将被下面的相应参数替换 myFloat The 2表示小数点后 2 位
  • 是否可以在 Artifactory 中重命名存储库?

    我们想引入一种命名约定 因为我们有大量的内部和外部存储库 因此我们希望让人们清楚什么是什么 添加这些存储库时 没有人预计事情会增长这么多 我想知道是否可以重命名存储库 我知道我可以创建新的并复制 移动其中的工件 但这看起来比我想要的要付出更
  • Automake:构建不被安装的共享模块

    如何告诉Automake构建一个不被安装的动态模块 pkglib LTLIBRARIES mywrapper la mywrapper la LDFLAGS no undefined module avoid version 导致 mywr
  • 如何在 C# 中保存随机生成器的状态? [复制]

    这个问题在这里已经有答案了 出于测试目的 我使用给定的种子创建随机数 即不基于当前时间 因此整个程序是确定性的 如果发生什么事情 我希望能够快速恢复到事件发生 不久之前 的点 因此我需要能够恢复System Random到之前的状态 有没有
  • Babel 对 Object.entries 的支持

    我正在看Object values Object entries 的第 3 阶段提案 https github com tc39 proposal object values entries我真的很想在我当前的 JavaScript 项目中
  • 过桥拼图

    晚上必须有四个人过桥 任何人过桥 无论是一个人还是两个人 都必须随身携带手电筒 必须用手电筒来回走动 每个人行走的速度不同 一个需要 1 分钟 另一个需要 2 分钟 另一个需要 5 分钟 最后 10 分钟 如果两个人一起穿过 他们必须以较慢
  • 将列表中连续出现的相同重复项目分组

    例如 我们有一个这样的列表 L item1 item2 item3 item3 item3 item1 item2 item4 item4 item4 我想将它们打包到以下形式的元组列表中 item1 1 item2 1 item3 3 i
  • 如何过期或重置地理位置

    当用户访问我的网站时 我会检查是否在 PHP 中设置了位置会话 如果没有设置与用户位置的会话 我将它们重定向到 www domain net location 在此页面上有许多选项供用户选择位置 如果浏览器允许 选项之一是使用浏览器进行设置
  • 为什么 `instance_of_object.foo is instance_of_object.foo` 的计算结果为 False? [复制]

    这个问题在这里已经有答案了 如果我有一个 class A def foo self pass 这评估为True getattr A foo is A foo 但这评估为False a A getattr a foo is a foo as
  • Android 自定义轮盘或老虎机实现

    我需要实现如图所示的类似轮子的控件 老虎机 但每个项目的边缘 项目之间的位置 需要平滑 以便它看起来像地球一样的球体 这是从 iPhone 库中获得的 iPhone 应用程序的屏幕截图 我想要安卓版的 我检查了 kankan 轮 Andro
  • 请帮助我解决VHDL编译错误[重复]

    这个问题在这里已经有答案了 library IEEE use IEEE std logic 1164 all entity doorlock is port reset in std logic enable in std logic pa
  • 如何处理 Node.js 中基于 Promise 的业务级函数中的错误返回对象?

    我需要创建一个名为 getLocationById 的业务级函数 它通过 REST API 从远程服务器检索一些数据 然后路由器调用该函数以在网页上显示数据 如果 fetch 调用成功 则将 json 结果作为 Promise 返回 但是
  • 无法在属性前面使用“d:”前缀来启用设计时数据

    我使用时遇到问题d 在 前面attributes 以在 XAML 设计器中显示它们
  • React警告滚动阻塞“touchstart”的非被动事件侦听器

    我有一个带有 Material ui Slider 的 React 组件 每次渲染此组件时 我都会收到此警告 向滚动阻塞 touchstart 事件添加了非被动事件侦听器 考虑将事件处理程序标记为 被动 以使页面响应更快 如何解决这个问题