드래그 드롭 업로드 구현 화면. 드롭중인 마우스가 드롭 영역에 들어올 때마다 드롭 영역의 배경색이 바뀌고 있다.

드래그 드롭 업로드 구현 화면. 드롭중인 마우스가 드롭 영역에 들어올 때마다 드롭 영역의 배경색이 바뀌고 있다.

요즘 대부분 웹사이트에서 파일을 업로드할 때 마우스로 원하는 파일을 끌어 놓는 드래그&드롭 기능을 지원한다. 리액트에선 React DnD 같은 라이브러리를 사용할 수도 있지만 HTML5에서 제공하는 드래그 드롭 API를 이용해서 직접 구현할 수 있다. 생각보다 어렵지도 않다.

기본 구조


Untitled



상태


export interface IFileTypes {
  id: number;
  object: File; // File 객체
}

const [isDragging, setIsDragging] = useState<boolean>(false);
const [files, setFiles] = useState<IFileTypes[]>([]);
const fileId = useRef<number>(0); // 상태가 변해도 리렌더할 필요 없으므로 useRef로 관리

onChange 핸들러