javascript - React.js文件上传UI拖放不起作用
问题描述
我正在尝试为我的 react.js 应用程序编写文件上传。但是,我无法让拖放区正常工作。即使我停止传播并阻止拖放事件的默认值,它仍然无法按预期工作。浏览器仍然打开我的文件。
export default function DraggableUploader() {
const fileInput = useRef(null)
const [loadedFile, setLoadedFile] = useState(null)
const [isLoading, setIsLoading] = useState(false)
const handleDragEnter = e => {
e.preventDefault();
e.stopPropagation();
};
const handleDragLeave = e => {
e.preventDefault();
e.stopPropagation();
};
const handleDragOver = e => {
e.preventDefault();
e.stopPropagation();
};
const handleDrop = e => {
e.preventDefault();
e.stopPropagation();
};
function handleSubmit(e) {
e.preventDefault()
console.log(`current file`, loadedFile.name)
}
return (
<div className="dropzone">
<div className="sub-header">Drag your audio file here:</div>
<div className="draggable-container">
<input
type="file"
className="file-browser-input"
name="file-browser-input"
style={{display: "none"}}
ref={fileInput}
onDrop={e => handleDrop(e)}
onDragOver={e => handleDragOver(e)}
onDragEnter={e => handleDragEnter(e)}
onDragLeave={e => handleDragLeave(e)}
onChange={handleInputChange}
/>
<div className="file-browser-container">
<Button variant="outline-primary" onClick={handleInputClick}>Browse</Button>
</div>
</div>
<Button variant="primary" onClick={handleSubmit}>Submit</Button>
</div>
)
}
解决方案
显然我没有 useEffect 来添加事件侦听器。如果添加以下代码,所有工作都按预期工作:
useEffect(() => {
let div = dropRef.current;
div.addEventListener('dragenter', handleDragEnter);
div.addEventListener('dragleave', handleDragLeave);
div.addEventListener('dragover', handleDragOver);
div.addEventListener('drop', handleDrop);
return function cleanup() {
div.removeEventListener('dragenter', handleDragEnter);
div.removeEventListener('dragleave', handleDragLeave);
div.removeEventListener('dragover', handleDragOver);
div.removeEventListener('drop', handleDrop);
};
});
推荐阅读
- postgresql - 在 PostgresSQL 中计算阶乘函数时出现“bigint out of range”
- javascript - 我的 total_final 值不起作用,Button 也不起作用
- c++ - 如何将 .so c/cpp 库添加到 android Studio
- android - API 在 chrome 中正常调用时有效,但在 Postman 中无效
- python - 全连接神经网络无法正确预测
- charles-proxy - 每当 Charles 关闭时,macOS 代理都会自动打开。如何解决?
- php - 如何使用 PHP 连接到 WSDL Web 服务并检索其内容?
- .htaccess - htaccess 重写规则,当我在末尾添加 / 时,url 不起作用并显示错误
- c# - 转换 BitmapImage 并保存
- javascript - 使用 JQuery 从外部文件加载 div