[javascript] Recharts에서 차트로 드래그 앤 드롭 기능을 추가하는 방법은 무엇인가요?

여러분은 React DnD(React Drag and Drop) 라이브러리를 사용하여 Recharts와 함께 드래그 앤 드롭 기능을 구현할 수 있습니다. React DnD 라이브러리는 React 애플리케이션에서 드래그 앤 드롭 기능을 구현하는 데 도움이 되는 유틸리티를 제공합니다.

먼저, React DnD 라이브러리를 설치합니다. 다음 명령어를 사용하여 패키지를 설치합니다.

npm install react-dnd react-dnd-html5-backend

이제, 드래그 앤 드롭을 구현할 컴포넌트를 만듭니다. 이 예제에서는 막대 그래프를 드래그 앤 드롭할 수 있도록 구현해보겠습니다.


import React from 'react';
import { BarChart, Bar, XAxis, YAxis } from 'recharts';
import { DragSource, DropTarget } from 'react-dnd';
import HTML5Backend from 'react-dnd-html5-backend';

// 드래그 앤 드롭 가능한 타입 설정
const ItemTypes = {
  CHART: 'chart'
};

// 드래그 소스 설정
const chartSource = {
  beginDrag(props) {
    return {
      index: props.index
    };
  }
};

// 드롭 타겟 설정
const chartTarget = {
  drop(props, monitor) {
    const dragIndex = monitor.getItem().index;
    const hoverIndex = props.index;
    props.moveChart(dragIndex, hoverIndex);
  }
};

// 드래그 앤 드롭 가능한 차트 컴포넌트
const DraggableChart = ({ x, y, width, height, isDragging, connectDragSource, connectDropTarget }) => (
  connectDragSource(
    connectDropTarget(
      <div style={{ opacity: isDragging ? 0.5 : 1 }}>
        <BarChart width={width} height={height} data={data}>
          <XAxis dataKey="name" />
          <YAxis />
          <Bar dataKey="value" fill="#8884d8" />
        </BarChart>
      </div>
    )
  )
);

const dragSource = DragSource(ItemTypes.CHART, chartSource, (connect, monitor) => ({
  connectDragSource: connect.dragSource(),
  isDragging: monitor.isDragging()
}));

const dropTarget = DropTarget(ItemTypes.CHART, chartTarget, connect => ({
  connectDropTarget: connect.dropTarget()
}));

export default dropTarget(dragSource(DraggableChart));

위의 예제 코드에서 DraggableChart 컴포넌트는 드래그 앤 드롭 가능한 차트 컴포넌트를 나타내며, React DnD의 DragSource와 DropTarget을 사용하여 드래그 앤 드롭 기능을 구현했습니다.

Recharts의 BarChart 컴포넌트를 DraggableChart로 감싸주고, 연결 함수인 connectDragSource와 connectDropTarget를 사용하여 드래그 앤 드롭 기능을 활성화합니다.

마지막으로, 드롭되었을 때의 동작을 구현하기 위해 moveChart 함수를 props로 전달받습니다. 이 함수는 드래그된 차트의 인덱스와 드롭된 차트의 인덱스를 사용하여 차트의 위치를 변경하는 역할을 합니다.

이와 같이 React DnD 라이브러리와 Recharts를 함께 사용하여 드래그 앤 드롭 기능을 구현할 수 있습니다. React DnD 라이브러리에 대한 자세한 내용은 공식 문서를 참조하시기 바랍니다.

레퍼런스: