动手试试
最简用法
Row.jsx<MotionSwipe
endActions={<button onClick={() => archive(id)}>Archive</button>}
dismiss="end"
onDismiss={() => remove(id)}
>
<MessagePreview />
</MotionSwipe>;
它替你处理的事
- 行跟随横向拖动,超过操作按钮区域时有阻力,并按你松手时的速度停稳。
- 设置
dismiss 后,长距离滑动或快速甩出会让行滑出、收起高度,然后调用 onDismiss(side)。 - 纵向滚动照常可用,同一时间只有一行保持展开。
- 点击已展开的行会将其收起,键盘焦点移到操作按钮上时会将其显示出来。
适用场景
- 在收件箱中归档或删除。
- 置顶一个会话。
- 从列表中移除一项。
Props
| Prop | 类型 | 默认值 | 说明 |
|---|
children | ReactNode | | 行的内容。 |
|---|
startActions | ReactNode | | 把行向结束方向拖动时,在行内开始一侧显示。 |
|---|
endActions | ReactNode | | 把行向开始方向拖动时,在行内结束一侧显示。 |
|---|
dismiss | 'start' | 'end' | 'both' | | 长距离滑动或快速甩出会移除该行的方向。 |
|---|
onDismiss | (side) => void | | 行滑出并收起后运行;请在这里把该项从数据中移除。 |
|---|
onOpenChange | (side | null) => void | | 携带展开的一侧运行,行收起时为 null。 |
|---|
disabled | boolean | false | 关闭滑动。 |
|---|
contentClassName | string | | 行内容的 class;contentStyle 设置其内联样式。 |
|---|
transition | Transition | spring | 时间曲线 { duration, easing } 或弹簧 { tempo: 'spring', spring }。弹簧被打断时会保留动量。 |
|---|
其他 props 会传给渲染的元素,所以 className、style 和事件处理函数照常可用。