Alle komponenter
MotionSwap
Indhold, der krydstoner, mens størrelsen følger med.
WebReact NativeIndhold og størrelse
Prøv det
Korteste brug
SaveButton.jsx<button onClick={save}>
<MotionSwap value={status} effect="up">
{status === 'saving' ? 'Saving…' : status === 'saved' ? 'Saved' : 'Save'}
</MotionSwap>
</button>;
Det klarer den for dig
- Elementet ændrer størrelse fra sin størrelse på skærmen til det nye indholds naturlige størrelse, så knapper aldrig hopper.
- Det gamle indhold toner ud, hvor det var, mens det nye toner ind; ingen af dem flyder om under skiftet.
- At skifte tilbage midt i et skift fortsætter fra det, der er på skærmen, i stedet for at stable kopier.
- Børn, der kun er tekst, er deres egen
value; giv value for alt andet.
Brug den til
- Gem, derefter Gemmer…, derefter Gemt.
- Et skelet, der bliver til et profilkort.
- En afspilknap, der bliver til pause.
Props
| Prop | Type | Standard | Beskrivelse |
|---|
value | unknown | | Indholdets identitet; en ny værdi skifter. Børn, der kun er tekst, er deres egen identitet. |
|---|
children | ReactNode | | Indholdet. |
|---|
as | element | 'span' | Elementet, der renderes. |
|---|
inline | boolean | as === 'span' | true tilpasser størrelsen til indholdet (etiketter, ikoner); false fylder forælderens bredde og animerer højden. |
|---|
align | 'start' | 'center' | 'end' | 'center' | Hvor indholdet sidder, mens størrelsen ændrer sig. |
|---|
effect | 'fade' | 'up' | 'down' | 'scale' | 'fade' | Hvordan indhold kommer ind og forlader: up stiger, down falder, scale vokser. |
|---|
transition | Transition | spring | En timingkurve { duration, easing } eller en fjeder { tempo: 'spring', spring }. Fjedre bevarer deres momentum, når de afbrydes. |
|---|
onMotionComplete | (value) => void | | Kører, når bevægelsen lander. |
|---|
Andre props går til det renderede element, så className, style og event handlers virker som normalt.