In this article, we will talk about creating a file drop feature in React without using any libraries.
The HTML spec provides us with an ondrop event handler for this.
<div ondrop="dropHandler(event);">
Drop files here
</div>We can use the same in React by setting the onDrop attribute (notice the camelCase).
<div onDrop={dropHandler}>
Drop files here
</div>But this is not enough. HTML also supports dragging events and if you try to drag & drop an element, the drag event takes precedence which opens the dropped file by default. Thus we need to disable drag events.
<div onDrop={dropHandler} onDragOver={e => e.preventDefault()}>
Drop files here
</div>With this, we make sure that the file won't open on drop. Now we handle the dropped files.
function App() {
const dropHandler = (e) => {
e.preventDefault();
const files = e.dataTransfer.files;
}
return (
<div onDrop={dropHandler} onDragOver={e => e.preventDefault()}>
Drop files here
</div>
);
}The files are an array of type File.
You can get their file names, file sizes, or read and upload them.