Усі компоненти
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
| Проп | Тип | Типово | Опис |
|---|
value | unknown | | Ідентичність вмісту; нове значення спричиняє заміну. Дочірній текст сам є своєю ідентичністю. |
|---|
children | ReactNode | | Вміст. |
|---|
as | element | 'span' | Елемент для рендеру. |
|---|
inline | boolean | as === 'span' | true підлаштовує розмір під вміст (підписи, іконки); false заповнює ширину батька й анімує висоту. |
|---|
align | 'start' | 'center' | 'end' | 'center' | Де розташований вміст, поки змінюється розмір. |
|---|
effect | 'fade' | 'up' | 'down' | 'scale' | 'fade' | Як вміст входить і йде: up піднімається, down опускається, scale росте. |
|---|
transition | Transition | spring | Крива timing { duration, easing } чи пружина { tempo: 'spring', spring }. Після переривання пружини зберігають інерцію. |
|---|
onMotionComplete | (value) => void | | Виконується, коли рух зупиняється. |
|---|
Решта props передається відрендереному елементу, тож className, style і обробники подій працюють як завжди.
Використовується в прикладах