Hook version:
const [image, setImage] = useState(null)
const onImageChange = (event) => {
if (event.target.files && event.target.files[0]) {
setImage(URL.createObjectURL(event.target.files[0]));
}
}
return (
<div>
<input type="file" onChange={onImageChange} className="filetype" />
<img alt="preview image" src={image}/>
</div>
)
Class version
render() {
return (
<div>
<input type="file" onChange={onImageChange} className="filetype" />
<img alt="preview image" src={this.state.image}/>
<div/>
)
}
onImageChange = (event) => {
if (event.target.files && event.target.files[0]) {
this.setState({image: URL.createObjectURL(event.target.files[0])});
}
}
Another solution is to use FileReader
onImageChange = (event) => {
if (event.target.files && event.target.files[0]) {
let reader = new FileReader();
reader.onload = (e) => {
setImage(e.target.result);
};
reader.readAsDataURL(event.target.files[0]);
}
}
Working demo: https://codesandbox.io/s/priceless-cerf-my900b