所有元件

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型別預設值說明
itemsreadonly T[]由你控制順序時的項目。
defaultItemsreadonly T[][]由元件保存順序時的初始項目。
onItemsChange(items, { reason, key }) => void帶著新的順序,以及變化來自拖曳、放下或鍵盤執行。
getKey(item) => string | numberitem為項目回傳唯一的 key。預設為項目本身。
renderItem(item, { index, dragging }) => ReactNodeitem.label繪製一個項目;會收到它的索引以及是否正被拖曳。
reorder'live' | 'drop''live'live 在拖曳時移動其他項目;drop 等到放下才移動。
layout'list' | 'grid''grid'list 或 grid。
columnsnumber3格狀排列的欄數。
gapnumber12項目之間的間距,單位為像素。
disabledbooleanfalse關閉拖曳。
durationnumber260其他項目讓開時的毫秒時長。
itemClassNamestring每個項目元素的 class;itemStyle 設定其行內樣式。

其他 props 會傳給渲染的元素,所以 className、style 與事件處理函式照常可用。

Web 與 React Native

onItemsChange(items, { reason }) 會告訴你變化來自拖曳、放下還是鍵盤。

在 React Native 上使用相同的 props,重新排序也會以無障礙動作的形式提供。

搜尋

輸入關鍵字搜尋文件。