reactjs - React onTransitionEnd 事件被频繁调用

标签 reactjs

我有这样的 React 代码:

handleTransitionEnd() {
    console.log('ended');
}

<div onTransitionEnd={(ev) => this.handleTransitionEnd(ev)}....

奇怪的是我的日志充满了结束。即使我根本没有任何与该元素相关的转换 CSS 逻辑。它似乎在每次状态更改或重新渲染时都会触发。这是正常的吗?我希望它仅在 css 转换结束时触发。

还有其他方法可以实现此回调吗?

谢谢

更新:

这是一个沙箱,显示出一些奇怪的地方:https://codesandbox.io/s/vy5wwyq5v3

单击第一个按钮会导致回调被调用 3 次,然后如果单击第二个按钮,即使没有发生转换,它也会被调用另外 2 次。我的应用程序比这更极端,它被调用的频率更高。

最佳答案

正在使用的 css 过渡 transition: "all 3s" 会导致多个属性发生过渡,而不仅仅是 margin-left。

在提供的示例中,outline-coloroutline-width 也进行了转换。然后,当单击其他任何位置(不仅仅是第二个按钮)时,它们会再次转换。

您可以通过检查事件来看到这一点:

onTransitionEnd={e => {
  e.persist();                 // see: https://reactjs.org/docs/events.html#event-pooling
  console.log(e.propertyName);
}}

CSS 过渡可以更具体:transition: "margin-left 3s" 以避免这种情况。 或者,测试 e.propertyName 是否符合所需情况。

关于reactjs - React onTransitionEnd 事件被频繁调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52303820/

相关文章:

reactjs - React-Number-Format 将值作为 float 传递给验证

javascript - onload 函数仅显示一个结果(我认为是列表中的最后一项)x 次

javascript - 格式化从 JSON 文件接收数据的 React 表

javascript - 回顾我的代码 React 中的函数式编程

javascript - React/Next.js 如何在按钮点击时获取其他 Element 事件目标值

reactjs - 创建 react 应用程序 - 如何将 pdf.worker.js 文件从 pdfjs-dist/build 复制到项目的输出文件夹?

javascript - react : Render other blocks

javascript - Typescript 错误 "Property does not exist on type ' JSX.IntrinsicElements'"使用 native Web 组件时

reactjs - React 测试库 : Test if children are passed/rendered correctly

reactjs - 我不断收到此错误 "RangeError: Array buffer allocation failed"