React · React Native · 16 のコンポーネント

難しいインタラクションを、完成品で。

Animated Chorus は、手で正しくつくるのが難しいインタラクションのためのモーションコンポーネント集です。回転する数字、ストリーミングテキスト、サイズが追従する切り替え、シート、ページャー、スワイプアクション、変わった項目だけが動くリスト。タグひとつとデータだけ。Provider もセットアップも要りません。

インストール
npm install @kkwaenggwari/animated-chorus

このビルドでの計測値

Chrome、2026-09-28。すべての条件とサンプルはパフォーマンスガイドにあります。 計測方法

  • 28.0KB16 のエクスポートすべての KB(gzip 後)

    Web のエントリー全体を minify したもの。peer は React だけです。

  • 0アニメーション中の JS フレームコールバック

    数字、高さ、ハイライトが同時に変わっても、12 個のアニメーションはすべてブラウザーが再生します。

  • 1値の変更 1 回あたりの React コミット

    MotionNumber は値が変わったときにレンダリングされ、回転している間はレンダリングされません。

  • 113000 文字のストリーミングでの React コミット

    MotionStream は文字を直接追加し、1 秒に数回だけ React に反映します。

01いちばんかんたん

タグひとつとデータだけ

どのコンポーネントも単体で動きます。Provider もラッパーも初期化の呼び出しも要りません。コレクションは items と renderItem を受け取り、レイアウト、テキスト、スタイルはあなたのものです。

  • コンポーネントをひとつ import して値を渡す。組み込みはそれだけです。
  • リスト、タブ、ページャーはあなたの配列を読みます。key のデフォルトは item.id です。
  • テキストは本物のテキストのまま。折り返し、フォントサイズに合わせて拡大し、選択もできます。
  • <MotionNumber value={total} />;
  • <MotionSwap value={status}>{label}</MotionSwap>;
  • <MotionHeight open={open}>{details}</MotionHeight>;
  • <MotionHighlight items={tabs} value={tab} onValueChange={setTab} />;
  • <MotionList items={tasks} renderItem={(task) => task.title} />;
  • <ProgressRing value={progress} />;

動いている 6 つのコンポーネントと、それぞれを支える 1 行のコード。

サンプルを準備中…

02いちばん速い

再生はブラウザーに。React は静かなまま。

Web では読み込むアニメーションライブラリーがありません。コンポーネントはモーションを Web Animations API に任せるので、回転する数字やサイズが変わるパネルも、動いている間はフレームごとの JavaScript も React レンダリングもかかりません。

  • 12 個のアニメーションが同時に動いている間の JS フレームコールバックは 0 回。
  • React のコミットは値の変更ごとに 1 回で、フレームごとではありません。
  • ストリーミングテキスト: 3000 文字に対して React のコミットは 11 回。下のサンプルは自分のレンダリング回数を数えています。

サンプルを準備中…

03いちばん安定

何を中断しても、飛ばない。

新しい値はすべて画面に見えている状態から始まり、スプリングは速度を保つので、連打もデータの一斉到着も反転も、意図したとおりに見えます。モーションが終われば、動き続けるものは何も残りません。

  • 数字が割れることはありません。残る桁は回転しながらスライドします。
  • 5 ms 間隔で 200 回の新しい値: 後に残るアニメーションは 0 個で、最後のテキストも正確です。
  • React StrictMode でも安全です。バックグラウンドの React Native アプリでは、モーションは終了状態に落ち着きます。

サンプルを準備中…

役割別に並べた 16 のコンポーネント

数字とテキスト、サイズが変わる内容、選択、リスト、ジェスチャー、オーバーレイ、進捗。それぞれに、横で props を調整できる動くワークベンチがあります。

すべてのコンポーネント

Web と React Native で同じ import

Metro はネイティブの実装を、Web のバンドラーは DOM の実装を選びます。それぞれのプラットフォームが、いちばん得意な方法でモーションを再生します。

App.jsx
// Web and React Native: the same import.
import { MotionNumber, MotionList } from '@kkwaenggwari/animated-chorus';

export function Score({ points, players }) {
  return (
    <>
      <MotionNumber value={points} />
      <MotionList items={players} renderItem={(player) => player.name} />
    </>
  );
}
要素WebReact Native
transform と opacityWeb Animations API、スプリングは解析的にサンプリングネイティブドライバーを使う Animated
幅と高さWeb Animations APIJS ドライバーを使う Animated(レイアウトのため)
ストリーミングテキスト文字を追加してフェードイン。React のレンダリングは 1 秒に数回本物の Text。フェードなしで表示
シートとズームトップレイヤーのネイティブ dialog透明な Modal。戻るボタンで閉じる

2 分ではじめる

インストールして、コンポーネントをひとつ import し、値を渡すだけ。

npm install @kkwaenggwari/animated-chorus

検索

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