所有元件

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 包住清單,就能同時為總高度加上動畫。

用到它的範例

搜尋

輸入關鍵字搜尋文件。