기능 구현 - Drag & Drop

치맨·2024년 4월 28일

기능구현

목록 보기
9/9
post-thumbnail

목차

react-beautiful-dnd

  • react-beautiful-dnd 라이브러리를 사용해서 Drag & Drop 기능을 구현해봤습니다.

  • Drag & Drop을 사용한 이유 : 우선 프로젝트 기획 단계에서 웹서비스 특성상 장소를 선택하고, 선택한 장소의 순서가 중요하기 때문에 Drag & Drop이 없더라면 순서를 맞추기 위해서 추가, 제거를 반복하는 과정이 불편하다고 생각했기 때문에 Drag & Drop을 도입하게 되었습니다.

  • 라이브러리를 사용한 이유 : 저는 최대한 구현할 수 있으면 라이브러리를 사용하지 않고 직접 구현하는 것이 좋다고 생각합니다. 하지만 정해진 기한 내에 직접 구현하는 것보다 라이브러리를 사용하는 것이 가독성과 최적화, 개발 생산성 측면에서 더 좋을 것 같다고 생각하여 도입하게 되었습니다.

  • react-beautiful-dnd를 사용한 이유 :

    1. 이전에 노마드코더에서 강의를 들을 때 한번 클론코딩으로 사용해봤었기에 비교적 쉽게 이해하고, 사용할 수 있기 때문에 사용했습니다.
    2. react-beautiful-dnd에 나와있듯이 설명이 너무 잘 되어있어서 선택했습니다.
    3. Atlassian에서 만든 React DND 라이브러리이기 때문에 큰 문제가 없다고 생각했습니다.
      4. 용량, 버전관리 등 더욱 고려할 부분이 많겠지만 우선 현재 프로젝트에선 문제가 되지 않았기에 사용했습니다. 아래의 사진과 같이 많은 사람들이 사용하고 있으니 괜찮지 않을까 합니다.

공식 github를 통해 사용하는 방법 알아보기

1. 우선 설치를 합니다.

  • npm install react-beautiful-dnd --save

    --save 옵션은 package.json의 dependencies에 모듈을 추가한다는 의미입니다.
    하지만 npm5 버전 이후에는 옵션을 쓰지 않아도 자동으로 추가 됩니다.

2. 사용하기 전에 알아둘 정보가 있습니다.

2-1. DragDropContext : Drag & Drop을 사용할 context를 설정합니다. 
2-2. Droppable : drop을 할 공간을 설정합니다.(DragDropContext 내부에 있어야 합니다.)
2-3. Draggable : drag를 할 요소를 설정합니다.(DragDropContext, Droppable 내부에 있어야 합니다.)

3. DragDropContext 사용법

  • 우선 공식 github을 알아보겠습니다.
  1. DragDropContext를 import합니다.
  2. DragDropContext 컴포넌트를 만들고, onDragStart, onDragEnd라는 property를 사용합니다.
    2-1. onDragStart : 드래그를 시작할때 처리를 하는 코드입니다.
    2-2. onDragEnd : 드래그를 끝날때 처리를 하는 코드입니다.
  3. DragDropContext 내부에서 원하는 방식으로 코드를 작성합니다.

4. Droppable 사용법

  • 우선 공식 github을 알아보겠습니다.
  1. Droppable를 import합니다.
  2. Droppable 컴포넌트를 만들고, 3가지의 props를 사용합니다.
  3. Droppable 내부에는 콜백형식{()=>}으로 코드를 구성하며, provied, snapshot 2가지의 argument를 사용할 수 있습니다.

5. Draggable 사용법

  • 우선 공식 github을 알아보겠습니다.
  1. Draggable import합니다.

  2. Draggable 컴포넌트를 만들고, 3가지의 props를 사용합니다.

  3. Draggable 내부에는 콜백형식{()=>}으로 코드를 구성하며, provied, snapshot 2가지의 argument를 사용할 수 있습니다.

  4. provied, snapshot안에 사용된 것들은 공식문서에서 확인하시면 됩니다.한글번역된 github


react beautiful dnd 실제 사용하기

  • 저는 DragDropContext는 큰 div, Droppable은 ul, Draggable은 li로 생각하고 적용하니 이해하기 쉬웠습니다.
  • 우선 DragDropContext,Droppable,Draggable를 먼저 만들어줍니다.

DragDropContext

  • 저는 드래그를 한 뒤, 놓을때 처리를 하기위해 onDragEnd를 사용했습니다.
  • onDragEnd 내부에서는 드래그를 할때 발생하는 destination, source 2가지의 정보를 통해 splice를 사용하여 배열의 순서를 바꾸는 방식으로 코드를 구현했습니다.

Droppable

  • droppableId를 지정해줍니다.
  • provided.innerRef의 속성을 이용해서 droppable을 설정해줍니다.
  • {...provided.droppableProps}를 사용한 이유

Draggable

  • draggableId를 지정해줍니다.
  • index값을 지정해줍니다.
  • provided.innerRef를 통해 드래그할 아이템을 설정합니다.
  • {...provided.draggableProps}를 지정해줍니다.
  • {...provided.dragHandleProps}를 통해 아이콘을 클릭했을때 드래그를 시작할 수 있도록 지정해줍니다.

완성 사진

profile
기본기가 탄탄한 개발자가 되자!

0개의 댓글