직접 해 보기
가장 짧은 사용법
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 | 항목의 고유하고 안정적인 키를 돌려줍니다. 기본값은 item.id, 문자열과 숫자는 그 값 자체입니다. |
|---|
renderItem | (item, index) => ReactNode | item.label | 항목을 그립니다. |
|---|
as | element | 'div' | 그릴 요소. |
|---|
itemAs | element | 'li' | 'div' | 각 항목의 요소. |
|---|
itemClassName | string | | 각 항목 요소의 클래스. 인라인 스타일은 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, 이벤트 핸들러를 평소처럼 쓸 수 있습니다.