React · React Native · 16 個元件

難做的互動,已經完成。

Animated Chorus 是一組動態元件,專為那些很難手寫到位的互動而生:滾動的數字、串流文字、尺寸會跟著變的切換、底部面板、翻頁器、滑動操作,以及只為變動項目加上動畫的清單。一個標籤加上你的資料,不需要 Provider,也不需要設定。

安裝
npm install @kkwaenggwari/animated-chorus

本次建置的實測數據

Chrome,2026-09-28。所有條件與樣本都在效能指南中。 測量方法

  • 28.0KBKB gzip,全部 16 個匯出

    整個 Web 進入點,已壓縮。唯一的 peer 相依是 React。

  • 0動畫進行時的 JS 影格回呼

    數字、高度與醒目標示同時變化:全部 12 個動畫都由瀏覽器播放。

  • 1每次值變化的 React commit 次數

    MotionNumber 在值改變時渲染,滾動過程中從不渲染。

  • 11串流 3000 個字元時的 React commit 次數

    MotionStream 直接附加字元,每秒只併入 React 幾次。

01最簡單

一個標籤加上你的資料

每個元件都能獨立運作:不需要 Provider、包裝元件或初始化呼叫。集合類元件接收 items 與 renderItem,版面、文字與樣式都歸你所有。

  • 匯入一個元件、傳一個值,整合就完成了。
  • 清單、分頁標籤與翻頁器讀取你的陣列;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} />;

六個即時運作的元件,以及各自背後的那一行程式碼。

正在準備範例…

02最快

交給瀏覽器播放,React 保持靜止。

在 Web 上不必載入動畫函式庫:元件把動態交給 Web Animations API,所以滾動的數字或改變尺寸的面板在移動時不耗費每一格的 JavaScript,也不觸發 React 渲染。

  • 12 個動畫同時執行時,JS 影格回呼為 0 次。
  • 每次值變化只有一次 React commit,而不是每一格一次。
  • 串流文字:3000 個字元只有 11 次 React commit。下方的範例會計算自己的渲染次數。

正在準備範例…

03最穩定

隨時中斷,從不跳動。

每個新值都從畫面上的當下狀態開始,彈簧會保留速度,所以快速連點、資料一次湧入與反向操作看起來都是刻意的。動態結束後,不會留下任何還在執行的東西。

  • 數字從不斷開:保留的位數會一邊滾動一邊滑動。
  • 間隔 5 ms 連續給 200 個新值:之後只剩 0 個動畫,最後的文字完全正確。
  • 在 React StrictMode 下也安全。React Native 應用程式在背景時,動態會直接落到結束狀態。

正在準備範例…

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 API使用 JS 驅動的 Animated,因為這屬於版面配置
串流文字附加字元並淡入;React 每秒只渲染幾次真正的 Text,不淡入直接顯示
底部面板與縮放頂層的原生 dialog透明的 Modal;返回鍵可關閉

兩分鐘上手

安裝、匯入一個元件、傳一個值。

npm install @kkwaenggwari/animated-chorus

搜尋

輸入關鍵字搜尋文件。