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.