MotionList
Список из данных, который анимирует только изменившееся.
ВебReact NativeСписки
Попробуйте
Подготовка примера…
Кратчайшее использование
<MotionList as="ul" items={todos} renderItem={(todo) => <TodoRow todo={todo} />} />;Что он берёт на себя
- Новые элементы входят с ограниченным каскадом, а нетронутые стоят на месте.
- Удалённые элементы покидают поток и анимированно уходят на своём месте, а остальные сдвигаются, закрывая промежуток.
- Переставленные элементы плавно переезжают на новые места.
- Перемещения, прерванные другим изменением, сохраняют скорость.
present={false}анимирует уход всех элементов, аplayKeyповторяет появление.
Для чего подходит
- Список задач.
- Отфильтрованные результаты поиска.
- Корзина покупок.
Props
| Проп | Тип | По умолчанию | Описание |
|---|---|---|---|
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 и обработчики событий работают как обычно.
Веб и React Native
Каждый элемент получает обёртку (li внутри ul или ol, иначе div; itemAs это меняет), стилизуемую через itemClassName.
Ключи должны быть уникальными. Оберните список в MotionHeight, чтобы анимировать и его общую высоту.
Используется в примерах
- Ответ в чатеПодсказки, которые сворачиваются, ответ, приходящий потоком в ровном темпе, и сменяющаяся строка статуса.
MotionStreamMotionListMotionSwapMotionHeight - Итог заказаКоличества, суммы по строкам и итог прокручиваются при изменении корзины; уведомление о купоне появляется и уходит; оплата требует осознанного удержания.
MotionListMotionNumberMotionPresenceMotionHold - ВходящиеВкладки-фильтры с живыми счётчиками, строки, которые можно смахнуть, и список, закрывающий промежуток.
MotionHighlightMotionListMotionSwipeMotionNumber