dnd-kitのアーキテクチャとアクセシビリティファースト設計
dnd-kitのセンサーモデルとアクセシビリティ通知、およびreact-beautiful-dndとの違いを理解します
「dnd-kitのアーキテクチャとアクセシビリティファースト設計」はCoddyKit上の無料React Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。
dnd-kitがreact-beautiful-dndに取って代わった理由
react-beautiful-dndはReact向けのドラッグ&ドロップライブラリの定番でしたが、2023年に正式にアーカイブされ、現在はメンテナンスされていません。コミュニティはすぐに推奨される代替ライブラリとしてdnd-kitを支持するようになりました。dnd-kitは、最新のReactとアクセシビリティを考慮してゼロから設計されています。
dnd-kitのコアアーキテクチャ
dnd-kitは、3つの主要なアーキテクチャ概念を中心に構築されています。DndContextはすべてのドラッグ状態を管理し、ドラッグ可能要素とドロップ可能要素の間を調整します。sensorsは入力方法を抽象化するため、マウス、タッチ、キーボードで同じドラッグロジックを利用できます。modifiersを使うと、ドラッグの移動をスナップ、制限、変換できます。
センサー:入力の抽象化
dnd-kitには3つの組み込みセンサーが用意されています。PointerSensorは統一されたPointer Events APIを通じて、マウスとタッチの両方の入力を処理します。KeyboardSensorはキーボードだけで完全なドラッグ&ドロップ操作を可能にします。TouchSensorは従来のタッチイベントを処理します。センサーはDndContextのsensorsプロパティで設定します。
キーボードによるドラッグ&ドロップ操作
dnd-kitには、アクセシビリティのためのキーボードナビゲーションが組み込まれています。ユーザーはSpaceでアイテムをつかみ、Arrow keysで新しい位置に移動し、もう一度Spaceを押してドロップします。Escapeを押すと、変更せずにドラッグをキャンセルできます。これらの操作はスクリーンリーダーに自動的に通知されます。
ARIAとスクリーンリーダーのサポート
dnd-kitは、支援技術にアイテムをつかんでいる状態を示すため、ドラッグ可能なアイテムにaria-grabbedを自動的に適用します。ドロップ可能な領域にはaria-dropeffectを使用し、アイテムをドロップしたときに何が起きるかを伝えます。ライブリージョンが状態の更新を通知するため、スクリーンリーダーのユーザーは「アイテムを取得しました」や「アイテムを正常にドロップしました」といった確認を聞くことができます。
ツリーシェイキング可能でCSSに依存しない設計
dnd-kitはツリーシェイキングに対応するよう設計されており、実際に使用する部分だけをインポートできます。CSSは同梱されていません。ドラッグ可能な要素、オーバーレイ、ドロップ領域の見た目を完全に制御できるよう、すべてのスタイル設定を開発者が担当します。そのため、バンドルサイズを最小限に抑えられます。
DndContextのイベントコールバック
DndContextには、ドラッグのライフサイクルを追跡するための3つの主要なイベントコールバックがあります。onDragStartはユーザーがドラッグを開始したときに実行され、アクティブなアイテムのIDを受け取ります。onDragOverは、ドラッグ中のアイテムがドロップ可能な対象の上を移動している間、継続的に実行されます。onDragEndはドラッグが完了したときに実行され、アクティブなアイテムとドロップ先を渡します。
DndContextでのセンサー設定
useSensorsフックとsensorsプロパティを組み合わせて、センサー設定の配列をDndContextに渡します。各センサーはuseSensor(SensorClass, options)で初期化します。たとえば、PointerSensorにドラッグ開始までの最小距離を設定し、クリック時の意図しないドラッグを防止できます。
移動制約のためのモディファイア
モディファイアは、ドラッグ中の要素に適用する前にドラッグ座標を変換します。restrictToVerticalAxisは移動を一方向に制限します。restrictToParentElementはドラッグ中のアイテムをコンテナ内にとどめます。snapCenterToCursorは要素の中心がカーソルを追従するようにスナップします。複数のモディファイアは配列で組み合わせます。
ドロップ可能要素とドラッグ可能要素のIDシステム
ドラッグ可能要素とドロップ可能要素には、それぞれ一意の文字列または数値のIDが必要です。これらのIDは、何がドラッグされ、どこにドロップされるかをdnd-kitが追跡するための基本的な手段です。onDragEndでは、ドラッグされたアイテムのevent.active.idと、ドロップ先のevent.over?.idを読み取り、アプリケーションの状態を更新します。
アクセシビリティを最優先する設計思想
キーボード対応を後付けの機能として扱う多くのDnDライブラリとは異なり、dnd-kitは設計の中心にアクセシビリティを据えています。KeyboardSensorは、PointerSensorと同じ機能を備えた主要な機能として提供されています。ARIA属性はすべて自動的に管理され、カスタム通知はDndContextのaccessibilityプロパティで設定できます。
キーボードセンサーの確認
変更せずに進行中のキーボードドラッグをキャンセルするには、dnd-kitでどのキーを使用しますか。
レッスンのまとめ:dnd-kitの基礎
dnd-kitは、アーカイブされたreact-beautiful-dndに取って代わり、Reactのドラッグ&ドロップにおけるコミュニティ標準になりました。そのアーキテクチャは、状態管理のDndContext、入力を抽象化するセンサー(Pointer、Keyboard、Touch)、移動を制約するモディファイアを中心に構成されています。アクセシビリティも最初から重視されており、ARIA属性、ライブリージョンによる通知、完全なキーボードナビゲーションが組み込まれています。
AI チューターと学ぶ React — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 88
- レッスン
- 324
よくある質問
「dnd-kitのアーキテクチャとアクセシビリティファースト設計」レッスンは無料ですか?
はい。「dnd-kitのアーキテクチャとアクセシビリティファースト設計」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。
「dnd-kitのアーキテクチャとアクセシビリティファースト設計」で何を学びますか?
dnd-kitのセンサーモデルとアクセシビリティ通知、およびreact-beautiful-dndとの違いを理解します ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
React Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「dnd-kitのアーキテクチャとアクセシビリティファースト設計」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このReact Academyレッスンでコードを書いて実行できますか?
はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- dnd-kitのアーキテクチャとアクセシビリティファースト設計
- DndContext、useDraggable、useDroppable
- 並べ替え可能なリストのためのSortableContext
- カスタムドラッグオーバーレイとマルチコンテナDnD