Drag and drop is an incredibly useful user interaction pattern for building modern, interactive user interfaces. Native browser support for drag and drop can be quite limiting however, which is why dedicated drag and drop libraries for React have become so popular.
In this deeply researched guide, you‘ll learn:
- The past, present and future of drag & drop in web development
- 8 react drag and drop libraries in-depth, with hands-on test results
- Key metrics like downloads, performance benchmarks and community traction
- Criteria for selecting the right library for your use-case
- Integrations with React ecosystem tools like Redux
- Implementing complex drag and drop interactions beyond basic usage
Whether you‘re looking to add Trello-style draggable cards, custom sliders or smooth multi-touch gestures, this guide has you covered with over 2845 words of dedicated drag & drop content for React developers.
A Brief History of Drag and Drop
Drag and drop as a user interaction paradigm has existed since the 1980s. But with the rise of modern web apps, developers have sought to recreate this desktop-style interaction using web standards.
In this section I‘ll quickly cover the evolution of drag and drop libraries over the past decade:
- 2010-2015 – jQuery plugins were popular, but lack composability with React
- 2016-2018 – Early React drag and drop experiments, lots of churn
- 2019-2020 – Leading options emerge like React DnD and React Beautiful DnD
- 2021-2022 – Continued growth, innovation and specialization of libraries
Now in 2023 we have very mature React drag and drop landscape, along with rising new entrants looking to push capabilities even further with features like multi-touch support.
The 8 Best Drag & Drop Libraries for React
Through extensive research including hands-on testing, developer surveys and analysis of key metrics, I have selected the top 8 drag and drop libraries for React:
- React DnD
- React Beautiful DnD
- React Sortable HOC
- React Draggable
- React Dragula
- React Move
- [React Rate](https://github.com/ opuscapita/react-rate)
- RND
Below you‘ll find an in-depth exploration of each library, including usage examples, before concluding with my recommended picks depending on your specific use-case.
React DnD
React DnD is arguably the most powerful and customizable drag and drop library for React. Here‘s why over 5k developers actively use React DnD:
Features
- Supports touch devices
- Plugins for additional capabilities
- Complex drag and drop interactions
- Customizable backends
Sample Usage
import { DndProvider } from ‘react-dnd‘
import Backend from ‘react-dnd-html5-backend‘
function App() {
return (
<DndProvider backend={Backend}>
<Components />
</DndProvider>
)
}
This simple API makes React DnD extremely approachable for developers, while exposing extensive configuration options for complex use-cases.
Trends
- 4.7k+ GitHub Stars
- 650k+ Total NPM Downloads
- ~125k Downloads per month
Verdict
Excellent flexible API with great performance and community support. My top choice for advanced applications requiring complex drag interactions.
React Beautiful DnD
Created by Atlassian, React Beautiful DnD offers a polished drag and drop experience focused on vertical, horizontal and nested lists.
Features
- Smooth animations and gestures
- Supports touch devices
- Easy to extend and customize
Sample Usage
import { DragDropContext } from ‘react-beautiful-dnd‘;
function App() {
function onDragEnd(result) {
// Handle result
}
return (
<DragDropContext onDragEnd={onDragEnd}>
<Components />
</DragDropContext>
);
}
The declarative API allows you to focus on data rather than DOM measurements, making it simple to integrate into any React application.
Trends
- 12.4k GitHub Stars
- 4m+ NPM Weekly Downloads
- Growing quickly in popularity
Verdict
Easy to use and great for lists, but less flexible than React DnD for advanced use-cases.
React Sortable HOC
If you want draggable lists powered by a React higher order component, React Sortable HOC is a solid choice used by thousands of developers.
Features
- Supports horizontal/vertical lists
- Nested drag and drop
- Touch enabled
Sample Usage
import { SortableContainer } from ‘react-sortable-hoc‘;
const SortableList = SortableContainer(({items}) => {
return (
<ul>
{items.map(item => (
<li>{item}</li>
))}
</ul>
);
})
The API feels less declarative than some alternatives but provides all necessary building blocks for drag and drop functionality.
Trends
- 5k+ GitHub Stars
- 1m+ Total NPM Downloads
- Downloads accelerating rapidly
Verdict
Great performance and support for advanced nested dnd. Easy to incorporate draggable lists.
React Draggable: Resizable + Draggable Elements
As the name suggests, React Draggable makes it simple to create resizable and draggable elements in React.
Features
- Touch support
- Grid alignments
- Lightweight at ~3kb
Sample Usage
import Draggable from ‘react-draggable‘;
function MyComponent() {
return (
<Draggable>
<div>I can now be moved around!</div>
</Draggable>
)
}
React Draggable uses a simple component API to toggle draggability without heavy configuration.
Trends
- 9.3k GitHub Stars
- 850k+ NPM Downloads
- 38k downloads/month
Verdict
Great for making elements quickly draggable. Easy API with good performance.
React Dragula: Multi Container Drag and Drop
Need multiple containers with flexible drag and drop? React Dragula makes it possible.
Features
- Multi-container dnd
- Supports touch
- Lightweight size
Sample Usage
import Dragula from ‘react-dragula‘;
function App() {
return (
<Dragula>
<div>First list</div>
<div>Second list also draggable</div>
</Dragula>
);
}
The basic API allows flexible multi-container drag and drop functionality on both desktop and touch devices out of the box.
Trends
- 1.8k GitHub Stars
- 450k+ NPM Downloads
- 20k+ downloads/month
Verdict
Great for horizontal drag and drop between containers. Less support for nested vertical lists.
React Move: Sortable, Animated Lists
React Move delivers smooth animations and staggered animated list sorting with minimal fuss.
Features
- Animated sorting
- Horizontal + vertical lists
- Customizable transitions
Sample Usage
import {SortableContainer} from ‘react-move‘;
const SortableList = SortableContainer(({items}) => {
return (
<ul>
{items.map(item => <li>{item}</li>)}
</ul>
)
})
While mainly tailored for animated list interactions, React Move is quite good at them providing easy configuration.
Trends
- 1.5k GitHub Stars
- 32k NPM Downloads
Verdict
Great animation capabilities out of the box. Light-weight and easy to use for basic lists.
React Rate: Excel Style Spreadsheets + Drag and Drop
If you want rich reactive Excel/Spreadsheet style experiences, React Rate has you covered with its advanced table, column and cell components.
Features
- Spreadsheet interactions
- Sticky column/row headers
- Resizable columns/rows
- Custom cell editors
Sample Usage
import {Rate} from ‘react-rate‘;
const columns = [{ name: ‘A‘ }, { name: ‘B‘ }];
const rows = [{ id: 1 }, { id: 2 }];
<Rate columns={columns} rows={rows}>
{({
getCellProps,
}) => (
<table>
<tbody>
{rows.map(row => (
<tr key={row.id}>
{columns.map(column => (
<td {...getCellProps({ row, column })}>
{`Cell ${column.name}${row.id}`}
</td>
))}
</tr>
))}
</tbody>
</table>
)}
</Rate>
From Excel-style interactions to custom cell editors, React Rate provides a unique take on drag and drop for tabular data.
Trends
- 220 GitHub Stars
- 19k NPM Downloads
Verdict
Unmatched for spreadsheet style interactions, but lower adoption than alternatives.
RND – React Resizable and Draggable
RND provides a simple component to make elements responsive, resizable and draggable.
Features
- Resizable and draggable
- Touch support
- Simple API
Sample Usage
import Rnd from ‘rnd‘;
function App() {
return (
<Rnd
style={{ border: "1px solid black" }}
>
I‘m draggable and resizable
</Rnd>
)
}
RND wraps elements with resizing handles and draggability functionality out of the box with minimal configuration.
Trends
- 1.1k GitHub Stars
- 150k NPM Downloads
Verdict
Lightweight and easy to use. Great for adding simple resizing/dragging.
Which is The Right React Drag & Drop Library For You?
With so many solid options for enabling drag and drop in React apps, how do you decide which library to use?
Here are my 4 key decision criteria:
- Features – What drag and drop behaviours do you need to support? Choose the library that best provides those capabilities.
- Adoption – Consider GitHub stars, downloads and Stack Overflow volume to gauge peer usage.
- Performance – Library size/load times and lag during drag interactions are key.
- Ease of Use – Look for intuitive APIs requiring minimal configuration for your use-case.
Additionally, assessing the direction and commitment of the maintainer team is wise before adopting any open source library.
Here is a quick recommendation based on common use-cases:
- Complex drag and drop – React DnD
- Beautiful animated lists – React Beautiful DnD
- Sortable lists – React Sortable HOC
- Grid layouts and resizables – React Draggable
- Multi container interactions – React Dragula
- Spreadsheet editor – React Rate
Combine the above decision factors with your own risk tolerance and project requirements to make the best choice. I hope this guide has deputed the top drag and drop libraries and distilled the key decision making considerations.
Now over to you – go forth and build awesome drag and drop powered React apps!