Все компоненты

MotionSwap

Содержимое, которое плавно сменяется, а размер подстраивается.

ВебReact NativeСодержимое и размер

Попробуйте

Подготовка примера…

Кратчайшее использование

SaveButton.jsx
<button onClick={save}>
  <MotionSwap value={status} effect="up">
    {status === 'saving' ? 'Saving…' : status === 'saved' ? 'Saved' : 'Save'}
  </MotionSwap>
</button>;

Что он берёт на себя

  • Элемент меняет размер от текущего на экране к естественному размеру нового содержимого, поэтому кнопки никогда не прыгают.
  • Старое содержимое исчезает на месте, пока новое появляется; ни одно не перестраивается во время смены.
  • Возврат назад посреди смены продолжается с того, что на экране, а не накапливает копии.
  • Дочерний текст сам служит своим value; для всего остального передайте value.

Для чего подходит

  • «Сохранить», затем «Сохранение…», затем «Сохранено».
  • Скелетон, который превращается в карточку профиля.
  • Кнопка воспроизведения, которая становится паузой.

Props

ПропТипПо умолчаниюОписание
valueunknownИдентичность содержимого; новое значение вызывает смену. Дочерний текст сам служит своей идентичностью.
childrenReactNodeСодержимое.
aselement'span'Элемент для рендера.
inlinebooleanas === 'span'true подстраивает размер под содержимое (подписи, иконки); false заполняет ширину родителя и анимирует высоту.
align'start' | 'center' | 'end''center'Где находится содержимое, пока меняется размер.
effect'fade' | 'up' | 'down' | 'scale''fade'Как содержимое входит и уходит: up поднимается, down опускается, scale растёт.
transitionTransitionspringКривая timing { duration, easing } или пружина { tempo: 'spring', spring }. При прерывании пружины сохраняют инерцию.
onMotionComplete(value) => voidВыполняется, когда движение останавливается.

Остальные props передаются отрендеренному элементу, поэтому className, style и обработчики событий работают как обычно.

Веб и React Native

inline (по умолчанию при рендере как span) анимирует ширину и высоту; inline={false} заполняет ширину родителя и анимирует высоту.

В React Native встроенные смены измеряют новое содержимое в одну строку; для переносимого содержимого используйте inline={false}.

Используется в примерах

Поиск

Начните вводить, чтобы искать в документации.