46 lines
1.1 KiB
Markdown
46 lines
1.1 KiB
Markdown
|
If you're still using class components, you can use the [`<Dropzone>`](https://react-dropzone.js.org/#components) component provided by the lib:
|
||
|
|
||
|
```jsx harmony
|
||
|
import React, {Component} from 'react';
|
||
|
import Dropzone from 'react-dropzone';
|
||
|
|
||
|
class Basic extends Component {
|
||
|
constructor() {
|
||
|
super();
|
||
|
this.onDrop = (files) => {
|
||
|
this.setState({files})
|
||
|
};
|
||
|
this.state = {
|
||
|
files: []
|
||
|
};
|
||
|
}
|
||
|
|
||
|
render() {
|
||
|
const files = this.state.files.map(file => (
|
||
|
<li key={file.name}>
|
||
|
{file.name} - {file.size} bytes
|
||
|
</li>
|
||
|
));
|
||
|
|
||
|
return (
|
||
|
<Dropzone onDrop={this.onDrop}>
|
||
|
{({getRootProps, getInputProps}) => (
|
||
|
<section className="container">
|
||
|
<div {...getRootProps({className: 'dropzone'})}>
|
||
|
<input {...getInputProps()} />
|
||
|
<p>Drag 'n' drop some files here, or click to select files</p>
|
||
|
</div>
|
||
|
<aside>
|
||
|
<h4>Files</h4>
|
||
|
<ul>{files}</ul>
|
||
|
</aside>
|
||
|
</section>
|
||
|
)}
|
||
|
</Dropzone>
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
<Basic />
|
||
|
```
|