[javascript] Beautiful Dnd를 사용하여 드래그 앤 드롭을 통한 데이터 조작하기

드래그 앤 드롭은 웹 애플리케이션에서 사용자가 요소를 드래그하여 다른 위치로 이동하거나 요소를 드롭하여 데이터를 조작할 수 있는 인터랙션 기능입니다. 이러한 기능을 구현하려면 보통 JavaScript 라이브러리를 사용하게 되는데, 그 중에서도 Beautiful Dnd는 강력하고 유연한 드래그 앤 드롭 라이브러리입니다.

Beautiful Dnd란?

Beautiful Dnd는 React를 기반으로 한 드래그 앤 드롭 라이브러리입니다. 이 라이브러리는 사용자가 정의한 요소들을 드래그하여 다른 위치로 이동하거나 드롭할 수 있게 해주는 기능을 제공합니다. Beautiful Dnd는 사용자 인터랙션을 처리하기 위해 성능을 최적화하고, 다양한 커스터마이징 옵션을 제공하여 유연한 구현이 가능합니다.

Beautiful Dnd 설치하기

Beautiful Dnd를 사용하기 위해서는 먼저 프로젝트에 해당 라이브러리를 설치해야 합니다. npm을 사용하는 경우, 다음 명령어를 실행하여 설치할 수 있습니다:

npm install react-beautiful-dnd

라이브러리를 설치한 후, React 컴포넌트에서 Beautiful Dnd를 import하여 사용할 수 있습니다:

import { DragDropContext, Draggable, Droppable } from 'react-beautiful-dnd';

Beautiful Dnd 사용하기

Beautiful Dnd를 사용하여 드래그 앤 드롭을 구현하는 방법은 크게 세 가지 단계로 나눌 수 있습니다.

  1. 컨텍스트 설정하기: DragDropContext 컴포넌트를 사용하여 드래그 앤 드롭 동작을 감지하고 처리할 수 있는 컨텍스트를 설정합니다.
<DragDropContext onDragEnd={onDragEnd}>
  {/* 드롭 영역과 드래그 가능한 요소를 정의하는 코드 */}
</DragDropContext>
  1. 드래그 가능한 요소와 드롭 영역 정의하기: Draggable과 Droppable 컴포넌트를 사용하여 드래그 가능한 요소와 해당 요소가 드롭될 수 있는 영역을 정의합니다.
<Droppable droppableId="droppable">
  {(provided) => (
    <div {...provided.droppableProps} ref={provided.innerRef}>
      {/* 드래그 가능한 요소를 정의하는 코드 */}
      {items.map((item, index) => (
        <Draggable key={item.id} draggableId={item.id} index={index}>
          {(provided) => (
            <div
              ref={provided.innerRef}
              {...provided.draggableProps}
              {...provided.dragHandleProps}
            >
              {item.content}
            </div>
          )}
        </Draggable>
      ))}
      {provided.placeholder}
    </div>
  )}
</Droppable>
  1. 드래그 앤 드롭 동작 처리하기: onDragEnd 콜백 함수를 구현하여 드래그 앤 드롭 동작이 발생했을 때 필요한 로직을 처리합니다. 이 함수는 드래그가 끝났을 때 호출되며, 드래그한 요소와 드롭된 위치에 대한 정보를 인자로 받습니다.
function onDragEnd(result) {
  if (!result.destination) {
    return;
  }

  const items = Array.from(this.state.items);
  const [reorderedItem] = items.splice(result.source.index, 1);
  items.splice(result.destination.index, 0, reorderedItem);

  this.setState({ items });
}

마무리

Beautiful Dnd를 사용하여 드래그 앤 드롭을 구현하면 사용자에게 직관적이고 유연한 인터랙션을 제공할 수 있습니다. 이러한 라이브러리를 사용하면 일반적으로 어려웠던 드래그 앤 드롭 기능을 상대적으로 간단하게 구현할 수 있습니다. Beautiful Dnd의 자세한 사용법은 공식 문서에서 확인할 수 있으며, 다양한 예제와 커뮤니티의 도움을 받아 원하는 기능을 구현해보시기 바랍니다.

참고 자료: