Open2
おすすめのdndライブラリについて

@hello-pangea/dnd
Mantineでも使われているdndライブラリ。
複雑なdndにおいて一番実装するのがシンプルだと感じる。
カスタムフックでの提供ではなく3つのコンポーネントで囲うだけで実装できる!
<DraggableContext>
で周りを囲ってドロップ対象のコンポーネントを<Drappable>
、ドラッグ対象のコンポーネントを<Droppable>
で囲うだけ!
コンポーネントを分割しなくても1ファイル内で実装できるのがでかい。

<DragDropContext onDragEnd={handleDragEnd}>
<Droppable droppableId="item-table" direction="vertical">
{(provided) => (
<tbody ref={provided.innerRef} {...provided.droppableProps}>
{items.map((item, index) => (
<Draggable key={item.id} index={index} draggableId={itemId}>
{(provided) => (
<tr key={itemId} {...provided.draggableProps}>
<td>
<DragHandle ref={provided.innerRef} index={index} {...provided.dragHandleProps} />
</td>
<td>
<ItemNameInput
itemId={itemId}
className={`${inputClass} w-[6.5rem]`}
{...register(index, 0)}
/>
</td>
<td>
<DeleteRowButton {...{ index, itemId }} />
</td>
</tr>
)}
</Draggable>
))}
{provided.placeholder}
</tbody>
)}
</Droppable>
</DragDropContext>