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 提交次数

    MotionNumber 在值变化时渲染,滚动过程中从不渲染。

  • 11流式输出 3000 个字符时的 React 提交次数

    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 提交,而不是每帧一次。
  • 流式文本:3000 个字符只有 11 次 React 提交。下面的示例会统计自己的渲染次数。

正在准备示例…

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

搜索

输入关键词搜索文档。