Dnd
@hello-pangea/dnd
Beautiful and accessible drag and drop for lists with React
Tables
drag and drop
dnd
sortable
reorder
reorderable
react
react.js
natural
beautiful
accessible
Stars
462
Weekly
2.2M
Open issues
6
Bundle
~25 kB
Installation
npm install @hello-pangea/dndCode example
import { DragDropContext, Droppable, Draggable } from "@hello-pangea/dnd";
import { useState } from "react";
export function Example() {
const [items, setItems] = useState(["One", "Two", "Three"]);
return (
<DragDropContext
onDragEnd={(result) => {
if (!result.destination) return;
const next = [...items];
const [moved] = next.splice(result.source.index, 1);
next.splice(result.destination.index, 0, moved);
setItems(next);
}}
>
<Droppable droppableId="list">
{(provided) => (
<ul ref={provided.innerRef} {...provided.droppableProps}>
{items.map((item, index) => (
<Draggable draggableId={item} index={index} key={item}>
{(drag) => (
<li ref={drag.innerRef} {...drag.draggableProps} {...drag.dragHandleProps}>
{item}
</li>
)}
</Draggable>
))}
{provided.placeholder}
</ul>
)}
</Droppable>
</DragDropContext>
);
}Pros & cons
Pros
- Actively maintained by Alex Reardon
- 2.2M weekly downloads. Battle tested
- First-class TypeScript definitions
- Apache-2.0 licensed
Considerations
- Adds roughly ~25 kB to your bundle
- Needs client-only rendering in SSR frameworks
- Not supported in React Native
- 6 open issues on GitHub