react-beautiful-dnd というドラッグ&ドロップのためのライブラリを知ったので調べた
react-beautiful-dndは、Atlassian社によって開発されているドラッグ&ドロップのためのライブラリで、使いやすいAPIを提供している
特徴
- 使いやすい
- 直感的なAPI:
- 宣言的な設計:
- Reactの宣言的なパラダイムに沿った設計になっており、命令的なコードを書く必要がない
- ドラッグ操作の結果は、onDragEndコールバックで処理するだけで済む
- センサブルなデフォルト設定:
- だいたい追加の設定なしで見栄えの良いドラッグアンドドロップUIを実現できる
- 必要に応じて、細かいカスタマイズも可能
- 豊富なドキュメントとサンプル:
- 公式ドキュメントが充実しており、多くの使用例やベストプラクティスが提供されている
- アクセシビリティへの配慮
- キーボード操作のサポート:
- マウスだけでなく、キーボードを使用してドラッグアンドドロップ操作を行える
- 矢印キーでの移動、スペースキーでの選択など、直感的な操作が可能
- スクリーンリーダーのサポート:
- ドラッグアンドドロップ操作中に、適切なARIA属性が動的に更新される
- これにより、スクリーンリーダーユーザーにも操作の状況が伝わる
- 色のコントラスト:
- フォーカス管理:
- ドラッグ操作中のフォーカス管理が適切に行われ、キーボードユーザーが操作を追跡しやすくなっている
- キーボード操作のサポート:
- パフォーマンスの最適化
主要コンポーネントの説明
以下のコンポーネントをimportして使う
DragDropContext
- ドラッグアンドドロップ機能を使用するアプリケーションの最上位コンポーネント
- ドラッグアンドドロップの操作全体を管理
onDragEnd
propsを必須とし、ドラッグ操作が完了したときの処理を定義する- オプションで
onDragStart
,onDragUpdate
などのコールバックも提供している
- ドラッグアンドドロップ機能を使用するアプリケーションの最上位コンポーネント
<DragDropContext onDragEnd={this.onDragEnd}> {/* 子コンポーネント */} </DragDropContext>
Droppable
<Droppable droppableId="list"> {(provided, snapshot) => ( <div ref={provided.innerRef} {...provided.droppableProps} > {/* Draggableコンポーネント */} {provided.placeholder} </div> )} </Droppable>
- Draggable
<Draggable draggableId={item.id} index={index}> {(provided, snapshot) => ( <div ref={provided.innerRef} {...provided.draggableProps} {...provided.dragHandleProps} > {item.content} </div> )} </Draggable>