全部组件

MotionList

由数据生成、只为变化项添加动画的列表。

WebReact Native列表

动手试试

正在准备示例…

最简用法

Todos.jsx
<MotionList as="ul" items={todos} renderItem={(todo) => <TodoRow todo={todo} />} />;

它替你处理的事

  • 新项以有上限的错开时间进场,未改动的项保持不动。
  • 被移除的项离开文档流并在原处退出,其余项滑过来填补空隙。
  • 重新排序的项滑向新位置。
  • 被另一次变化打断的移动会保留速度。
  • present={false} 让所有项退场,playKey 重新播放进场动画。

适用场景

  • 待办清单。
  • 筛选后的搜索结果。
  • 购物车。

Props

Prop类型默认值说明
itemsreadonly T[]—必需你的数据数组。
getKey(item) => string | numberitem.id为一项返回唯一且稳定的 key。默认为 item.id,字符串和数字则为其本身。
renderItem(item, index) => ReactNodeitem.label绘制一项。
aselement'div'要渲染的元素。
itemAselement'li' | 'div'每一项使用的元素。
itemClassNamestring每一项元素的 class;itemStyle 设置其内联样式。
effect'rise' | 'fade' | 'scale' | 'slide''rise'各项如何进出。
distancenumber16rise 和 slide 的移动距离,单位为像素。
staggernumber40进场各项之间的毫秒间隔。
order'forward' | 'reverse''forward'错开的方向。
presentbooleantruefalse 在保留布局的同时让所有项退场;true 让它们回来。
initialbooleantrue列表挂载时播放进场动画。
playKeystring | number改变它会重新播放进场动画。
transitionTransitionspring进出场项的过渡。
layoutTransitionTransitionspring滑向新位置的项的过渡。

其他 props 会传给渲染的元素,所以 className、style 和事件处理函数照常可用。

Web 与 React Native

每一项都有一个包裹元素(在 ul 或 ol 内为 li,否则为 div;可用 itemAs 修改),用 itemClassName 设置样式。

key 必须唯一。用 MotionHeight 包裹列表,就能同时为总高度添加动画。

用到它的示例

搜索

输入关键词搜索文档。