javascript - Warning: This synthetic event is reused for performance reasons React
问题描述
Can somebody explain to me why I got these warning in console, when I try to drag and how to solve it?
// Main Component
handleDragStart = data => event => {
console.log("dataaa", data, "event ", event);
};
makeBoxes = () => {
return this.state.boxes.map(box => (
<Box
key={box.id}
box={box}
draggable={true}
onDragStart={this.handleDragStart}
/>
));
};
render() {
return <div className="box-group">{this.makeBoxes()}</div>;
}
// Box Component
export default class Box extends React.Component {
render() {
const { id, color, text } = this.props.box;
return (
<div
className="boxElement"
id={id}
style={{ backgroundColor: color }}
draggable={this.props.draggable}
onDragStart={this.props.onDragStart({ id: id })}
>
<div>{text}</div>
</div>
);
}
}
I got this warning:
Warning: This synthetic event is reused for performance reasons. If you're seeing this, you're accessing the property clientX
on a released/nullified synthetic event. This is set to null. If you must keep the original synthetic event around, use event.persist().
解决方案
在您的 BoxesGroup 中,我将handleDrag
函数编辑为如下所示来解决它:
handleDragStart = data => event => {
event.persist();
event.dataTransfer.setData("text", event.target.id);
console.log("data", data, "event ", event);
};
这是来自 React文档:
如果您想以异步方式访问事件属性,您应该在事件上调用 event.persist(),这将从池中删除合成事件并允许用户代码保留对事件的引用。
默认情况下,react 有一个事件池,它会继续使用它们。(类似于线程池)。为了避免在使用后将事件放回池中做出反应,您可以调用event.persist()
.
推荐阅读
- python - 随着时间的推移在两个傅立叶变换之间进行插值
- javascript - 使用 d3.js 将数据从 csv 文件显示到 BarGraph
- javascript - Browserify 转换插件,用于评估 IIFE 并在捆绑期间用其结果替换
- python - 从不等形状的一维数组构造二维numpy数组| 麻木的
- python - 使用 Numpy 进行多维批量图像卷积
- graph - 如何使用 Gremlin 提高最短路径的性能?
- html - 表响应在 IOS 浏览器中不起作用
- jquery - 在jQuery中的另一个子元素中查找子元素
- laravel-5 - laravel 中的 vue js 中的历史模式时组件未加载
- java - 结果集中的 Java 按钮数组