Wszystkie komponenty

MotionSwap

Treść przenikająca się, podczas gdy rozmiar za nią podąża.

SiećReact NativeTreść i rozmiar

Wypróbuj

Przygotowywanie przykładu…

Najkrótsze użycie

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

Co robi za ciebie

  • Element zmienia rozmiar od rozmiaru na ekranie do naturalnego rozmiaru nowej treści, więc przyciski nigdy nie skaczą.
  • Stara treść znika w miejscu, a nowa się pojawia; żadna nie przelewa się podczas zamiany.
  • Powrót w środku zamiany kontynuuje od tego, co na ekranie, zamiast piętrzyć kopie.
  • Dzieci będące zwykłym tekstem są własnym value; dla wszystkiego innego przekaż value.

Do czego służy

  • Zapisz, potem Zapisywanie…, potem Zapisano.
  • Szkielet, który staje się kartą profilu.
  • Przycisk odtwarzania, który staje się pauzą.

Props

PropTypDomyślnieOpis
valueunknownTożsamość treści; nowa wartość ją zamienia. Dzieci będące zwykłym tekstem są własną tożsamością.
childrenReactNodeTreść.
aselement'span'Element do wyrenderowania.
inlinebooleanas === 'span'true dopasowuje rozmiar do treści (etykiety, ikony); false wypełnia szerokość rodzica i animuje wysokość.
align'start' | 'center' | 'end''center'Gdzie znajduje się treść podczas zmiany rozmiaru.
effect'fade' | 'up' | 'down' | 'scale''fade'Jak treść wchodzi i wychodzi: up unosi się, down opada, scale rośnie.
transitionTransitionspringKrzywa timing { duration, easing } lub sprężyna { tempo: 'spring', spring }. Sprężyny zachowują pęd po przerwaniu.
onMotionComplete(value) => voidUruchamia się, gdy ruch się ułoży.

Pozostałe props trafiają do renderowanego elementu, więc className, style i obsługa zdarzeń działają jak zwykle.

Sieć i React Native

inline (domyślne przy renderze jako span) animuje szerokość i wysokość; inline={false} wypełnia szerokość rodzica i animuje wysokość.

W React Native zamiany inline mierzą nową treść w jednej linii; dla treści, która się zawija, użyj inline={false}.

Użyty w tych przykładach

Szukaj

Zacznij pisać, aby przeszukać dokumentację.