Sortable
The sortable preset provides the building blocks to build sortable interfaces.
Installation
npm install @dnd-kit/sortableOverview
import React, {useState} from 'react';
import {
DndContext,
closestCenter,
KeyboardSensor,
PointerSensor,
useSensor,
useSensors,
} from '@dnd-kit/core';
import {
arrayMove,
SortableContext,
sortableKeyboardCoordinates,
verticalListSortingStrategy,
} from '@dnd-kit/sortable';
import {SortableItem} from './SortableItem';
function App() {
const [items, setItems] = useState([1, 2, 3]);
const sensors = useSensors(
useSensor(PointerSensor),
useSensor(KeyboardSensor, {
coordinateGetter: sortableKeyboardCoordinates,
})
);
return (
<DndContext
sensors={sensors}
collisionDetection={closestCenter}
onDragEnd={handleDragEnd}
>
<SortableContext
items={items}
strategy={verticalListSortingStrategy}
>
{items.map(id => <SortableItem key={id} id={id} />)}
</SortableContext>
</DndContext>
);
function 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);
});
}
}
}Architecture

Single container

Multiple containers


Concepts
Sortable Context
useSortable

Sensors
SensorsSorting strategies
Collision detection algorithm
碰撞检测算法Connecting all the pieces
Drag Overlay
最后更新于