動手試試
最簡用法
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 與事件處理函式照常可用。