すべてのコンポーネント
MotionReorder
ドラッグでリストやグリッドを並べ替え。キーボードにも対応。
WebReact Nativeリスト
試してみる
いちばん短い使い方
Playlist.jsx<MotionReorder
items={tracks}
onItemsChange={setTracks}
layout="list"
renderItem={(track) => track.title}
/>;
代わりに処理してくれること
- ほかの項目は、ドラッグ中に(
reorder="live")、またはドロップしたときに(reorder="drop")よけて動きます。 columns と gap で、リストとグリッドのレイアウトに対応。- Web ではキーボードで移動でき、React Native ではアクセシビリティアクションを提供します。
items と onItemsChange で制御するか、defaultItems で非制御にします。
こんなときに
- プレイリスト。
- 優先順位を付けたバックログ。
- 写真のグリッド。
props
| Prop | 型 | デフォルト | 説明 |
|---|
items | readonly T[] | | 並び順を制御する場合の項目。 |
|---|
defaultItems | readonly T[] | [] | 並び順をコンポーネントに任せる場合の最初の項目。 |
|---|
onItemsChange | (items, { reason, key }) => void | | 新しい並び順と、それがドラッグ、ドロップ、キーボードのどれによるものかを受け取って実行されます。 |
|---|
getKey | (item) => string | number | item | 項目の一意な key を返します。デフォルトは項目そのものです。 |
|---|
renderItem | (item, { index, dragging }) => ReactNode | item.label | 項目を描画します。インデックスと、ドラッグ中かどうかを受け取ります。 |
|---|
reorder | 'live' | 'drop' | 'live' | live はドラッグ中にほかの項目を動かし、drop はドロップを待ちます。 |
|---|
layout | 'list' | 'grid' | 'grid' | list または grid。 |
|---|
columns | number | 3 | グリッドの列数。 |
|---|
gap | number | 12 | 項目間の間隔(ピクセル)。 |
|---|
disabled | boolean | false | ドラッグを無効にします。 |
|---|
duration | number | 260 | ほかの項目がよけて動くときの時間(ミリ秒)。 |
|---|
itemClassName | string | | 各項目の要素のクラス。インラインスタイルは itemStyle で指定します。 |
|---|
ほかの props は描画される要素に渡るので、className、style、イベントハンドラーはいつもどおり使えます。