Examples
Import
import { DndContext } from '@dnd-kit/core';import {arrayMove,horizontalListSortingStrategy,SortableContext,useSortable,} from '@dnd-kit/sortable';import { CSS } from '@dnd-kit/utilities';
Integrating with useSortable
function DndKitExample() {const [items, setItems] = React.useState(['Tech','News','CMS','Contentful',]);function DraggablePill({ id }) {const { attributes, listeners, setNodeRef, transform, transition } =useSortable({id,});const style = {transform: CSS.Translate.toString(transform),transition,};return (<PilldragHandleComponent={<DragHandlelabel="Reorder item"variant="transparent"{...attributes}{...listeners}/>}isDraggablelabel={id}ref={setNodeRef}style={style}/>);}const handleDragEnd = (event) => {const { active, over } = event;if (active.id !== over.id) {setItems((items) => {const oldIndex = items.indexOf(active.id);const newIndex = items.indexOf(over.id);return arrayMove(items, oldIndex, newIndex);});}};return (<DndContext onDragEnd={handleDragEnd}><SortableContext items={items} strategy={horizontalListSortingStrategy}><Flex gap="spacingS">{items.map((item) => (<DraggablePill id={item} key={item} />))}</Flex></SortableContext></DndContext>);}
Example with table rows
function DndKitExample() {const styles = {row: css({// This lets us change z-index when draggingposition: 'relative',}),};const [items, setItems] = React.useState(['Tech','News','CMS','Contentful',]);function DraggableTableRow({ id }) {const { active, attributes, listeners, setNodeRef, transform, transition } =useSortable({id,});const zIndex = active && active.id === id ? 1 : 0;const style = {zIndex,transform: CSS.Translate.toString(transform),transition,};return (<Table.Row className={styles.row} ref={setNodeRef} style={style}><Table.Cell><DragHandlelabel="Reorder item"variant="transparent"{...attributes}{...listeners}/></Table.Cell><Table.Cell width="95%"><Text fontWeight="fontWeightMedium">{id}</Text></Table.Cell></Table.Row>);}const handleDragEnd = (event) => {const { active, over } = event;if (active.id !== over.id) {setItems((items) => {const oldIndex = items.indexOf(active.id);const newIndex = items.indexOf(over.id);return arrayMove(items, oldIndex, newIndex);});}};return (<DndContext onDragEnd={handleDragEnd}><SortableContext items={items} strategy={horizontalListSortingStrategy}><Table>{items.map((item) => (<DraggableTableRow id={item} key={item} />))}</Table></SortableContext></DndContext>);}