动手试试
最简用法
Todos.jsx<MotionList as="ul" items={todos} renderItem={(todo) => <TodoRow todo={todo} />} />;
它替你处理的事
- 新项以有上限的错开时间进场,未改动的项保持不动。
- 被移除的项离开文档流并在原处退出,其余项滑过来填补空隙。
- 重新排序的项滑向新位置。
- 被另一次变化打断的移动会保留速度。
present={false} 让所有项退场,playKey 重新播放进场动画。
Props
| Prop | 类型 | 默认值 | 说明 |
|---|
items | readonly T[] | —必需 | 你的数据数组。 |
|---|
getKey | (item) => string | number | item.id | 为一项返回唯一且稳定的 key。默认为 item.id,字符串和数字则为其本身。 |
|---|
renderItem | (item, index) => ReactNode | item.label | 绘制一项。 |
|---|
as | element | 'div' | 要渲染的元素。 |
|---|
itemAs | element | 'li' | 'div' | 每一项使用的元素。 |
|---|
itemClassName | string | | 每一项元素的 class;itemStyle 设置其内联样式。 |
|---|
effect | 'rise' | 'fade' | 'scale' | 'slide' | 'rise' | 各项如何进出。 |
|---|
distance | number | 16 | rise 和 slide 的移动距离,单位为像素。 |
|---|
stagger | number | 40 | 进场各项之间的毫秒间隔。 |
|---|
order | 'forward' | 'reverse' | 'forward' | 错开的方向。 |
|---|
present | boolean | true | false 在保留布局的同时让所有项退场;true 让它们回来。 |
|---|
initial | boolean | true | 列表挂载时播放进场动画。 |
|---|
playKey | string | number | | 改变它会重新播放进场动画。 |
|---|
transition | Transition | spring | 进出场项的过渡。 |
|---|
layoutTransition | Transition | spring | 滑向新位置的项的过渡。 |
|---|
其他 props 会传给渲染的元素,所以 className、style 和事件处理函数照常可用。