全部组件

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,并且排序也以无障碍操作的形式提供。

搜索

输入关键词搜索文档。