动手试试
最简用法
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 | | 每一项元素的 class;itemStyle 设置其内联样式。 |
|---|
其他 props 会传给渲染的元素,所以 className、style 和事件处理函数照常可用。