Efficient way of rendering an image preview from a File
$ yarn add react-preview-file simple
import FilePreview from 'react-preview-file'; render() { const file = new File(['someBase64'], 'me.png'); return ( <FilePreview file={file}> {(preview) => {<img src={preview} />}} </FilePreview> ) }full
import FilePreview from 'react-preview-file'; class App extends React.Component { onInputChange = e => { const { currentTarget: { files } } = e; this.setState({files[0]}); } render() { const {file} = this.state; return ( <div> <input type="file" onChange={this.onChange} /> <FilePreview file={file}> {(preview) => { <img src={preview} /> }} </FilePreview> </div> ) } }- file: File
- children: (preview: string) => ReactNode
- Avoid multiple re-renders: FilePreview uses URL.createObjectURL instead of FileReader, the first one happens asynchronously and avoids dealing with state and multiple re-renders 👁
- Automatically revoke: FilePreview takes care for you of revoke the created preview. This makes memory usage as efficient as possible 🔥
- Efficient preview generation: Not only createObjectURL is faster than FileReader.readAsDataURL byt it also produces fixed length strings, instead of massive base64 strings ⚡️