dnd-kitでドラッグ&ドロップでリストにアイテムを並び替えるだけでなく、リストの末尾にドラッグしたら新しくアイテムを追加したい
基本方針
- リストの末尾に
useDroppableな要素を置いてドロップ可能にする - ドロップ判定時に「sortableリスト上なのか、droppableアイテム上なのか」を区別する
onDragEndで末尾への追加処理を行う
実装例
1. リストの末尾に useDroppable を設定
const { setNodeRef } = useDroppable({ id: 'new' }); return ( <div className="list-container"> {items.map(id => ( <SortableItem key={id} id={id} /> ))} <div ref={setNodeRef} > ここにドロップして追加 </div> </div> );
2. onDragEnd で末尾追加を判定
const { active, over } = event; if (!over) return; if (over.id === 'new') { // リスト自体にドロップされた場合 → 末尾に追加 setItems((prev) => [...prev, active.id]); } else { // 通常の並び替え処理 reorderItems(active.id, over.id); } };