[TIL] 04.22 react-dropzone
2020. 4. 22. 23:18ㆍTIL
이미지 업로더 라이브러리인 react-dropzone 에 대해서 공부를 하였다.
const Previews = (props) => {
//업로드하려는 파일의 정보를 담는다.
const [files, setFiles] = useState([]);
// 업로드 하려는 파일의 URL을 생성하고 파일 name 등의 정보를 files 에 담아준다.
const onDrop = (acceptedFiles) => {
setFiles(acceptedFiles.map(file => Object.assign(file, {
preview: URL.createObjectURL(file)
})));
}
const {
getRootProps,
getInputProps
} = useDropzone({
accept: 'image/*',// 허용 하는 파일 형식
onDrop,
}
});
// 업로드하려고 선택한 파일의 이미지를 미리보기로 보여준다.
const thumbs = files.map(file => (
<div key={file.name}>
<div>
<img
src={file.preview}
/>
</div>
</div>
));
useEffect(() => () => {
// createObjectURL 로 생성한 URL을 revokeObjectURL 로 제거 해준다
//메모리 누수를 방지하기 위해 생성된 URL을 DOM과 바인딩한 후에는 해제하는 것이 좋다고한다.
files.forEach(file => URL.revokeObjectURL(file.preview));
}, [files]);
//현재 업로드한 이미지 파일을 취소하는 기능
const handleCancle = () => {
setfiles([])
}
return (
<section className="container">
{files.length < 0 ? // 이미지 업로드가 되면 업로드 버튼은 안보이게 되고 미리보기 이미지를 보여준다.
<div {...getRootProps({className: 'dropzone'})}>
<input {...getInputProps()} />
<p>Drag 'n' drop some files here, or click to select files</p>
</div> :
<div>
{thumbs}
<button onClick={handleCancle}>
cancle
</button>
</div>
}
</section>
);
}
export default Preview
'TIL' 카테고리의 다른 글
[TIL] 04.27 (0) | 2020.04.27 |
---|---|
[TIL] 04.23 react pagination (0) | 2020.04.23 |
[TIL] 04.21 (0) | 2020.04.21 |
[TIL] 04.20 Webpack (0) | 2020.04.20 |
[TIL] 04.14 (0) | 2020.04.14 |