すべてのコンポーネント

MotionSwap

中身がクロスフェードし、サイズもそれに追従します。

WebReact Native内容とサイズ

試してみる

サンプルを準備中…

いちばん短い使い方

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

代わりに処理してくれること

  • 要素は画面上のサイズから新しい中身の本来のサイズへと変わるので、ボタンが跳ねることはありません。
  • 古い中身は元の場所でフェードアウトし、新しい中身がフェードインします。切り替え中にどちらもレイアウトし直されません。
  • 切り替えの途中で元に戻しても、コピーが重なることなく、画面に見えている状態から続きます。
  • プレーンテキストの子要素はそれ自体が value です。それ以外のものには value を渡します。

こんなときに

  • 「保存」から「保存中…」、そして「保存しました」へ。
  • スケルトンがプロフィールカードに変わる。
  • 再生ボタンが一時停止ボタンに変わる。

props

Prop型デフォルト説明
valueunknown中身の識別子。新しい値で切り替わります。プレーンテキストの子要素はそれ自体が識別子です。
childrenReactNode中身。
aselement'span'描画する要素。
inlinebooleanas === 'span'true は中身(ラベル、アイコン)に合わせたサイズに、false は親の幅いっぱいに広がって高さをアニメーションします。
align'start' | 'center' | 'end''center'サイズが変わる間の中身の位置。
effect'fade' | 'up' | 'down' | 'scale''fade'中身の出入りのしかた: up は上がり、down は下がり、scale は大きくなります。
transitionTransitionspringタイミングカーブ { duration, easing } かスプリング { tempo: 'spring', spring }。スプリングは中断されても勢いを保ちます。
onMotionComplete(value) => voidモーションが落ち着いたときに実行されます。

ほかの props は描画される要素に渡るので、className、style、イベントハンドラーはいつもどおり使えます。

Web と React Native

inline(span として描画するときのデフォルト)は幅と高さをアニメーションし、inline={false} は親の幅いっぱいに広がって高さをアニメーションします。

React Native のインラインの切り替えは、新しい中身を 1 行として計測します。折り返す中身には inline={false} を使ってください。

使っているサンプル

検索

入力するとドキュメントを検索します。