【发布时间】:2021-12-11 03:47:05
【问题描述】:
请参阅this codesandbox。
我有一个父 div 需要处理可拖动事件(例如当文件被拖动到它上面时)。当onDragEnter 被调用时,我想要改变背景颜色。但是,我有一个子 div,当它悬停在它上面时,会调用父 div 的 onDragLeave 事件。我尝试使用带有此子 div 的 ref 来确定事件目标是否包含在子 div 中,但这似乎不起作用。如何避免 React 中的子 div 调用 onDragLeave 事件?谢谢!
import React, { useState } from 'react';
const App = () => {
const [dragOver, setDragOver] = useState(false);
const preventDefaults = (event) => {
event.preventDefault();
event.stopPropagation();
};
const onDragEnter = (event) => {
preventDefaults(event);
console.log('ENTER');
if (!dragOver) {
setDragOver(true);
}
};
const onDragLeave = (event) => {
preventDefaults(event);
console.log('LEAVE');
setDragOver(false);
};
return (
<div
data-testid="document-upload"
onDragEnter={onDragEnter}
onDragLeave={onDragLeave}
style={{
background: dragOver ? 'green' : 'red',
height: '20rem',
width: '20rem',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
}}
>
<div
style={{ border: '2px solid blue', height: '10rem', width: '10rem' }}
/>
</div>
);
};
export default App;
【问题讨论】:
-
这是一个非常棘手的 HTML5 拖放业务 - 请参阅此问题和答案以供参考 stackoverflow.com/questions/7110353/…
标签: javascript html css reactjs