React · React Native · 16 component

Tương tác khó, đã hoàn thiện.

Animated Chorus là bộ component chuyển động cho những tương tác khó làm đúng bằng tay: số cuộn, văn bản truyền dần, hoán đổi có đổi kích thước, sheet, pager, thao tác vuốt và danh sách chỉ tạo hoạt ảnh cho phần thay đổi. Một thẻ và dữ liệu của bạn. Không provider, không thiết lập.

Cài đặt
npm install @kkwaenggwari/animated-chorus

Đo trên bản build này

Chrome, 2026-09-28. Mọi điều kiện và mẫu đo có trong hướng dẫn hiệu năng. Cách đo

  • 28.0KBKB gzip cho cả 16 export

    Toàn bộ điểm vào web, đã thu gọn. React là peer duy nhất.

  • 0Callback khung hình JS khi đang hoạt ảnh

    Một con số, một chiều cao và một điểm nhấn thay đổi cùng lúc: trình duyệt phát cả 12 hoạt ảnh.

  • 1Commit React cho mỗi lần đổi giá trị

    MotionNumber render khi giá trị thay đổi, không bao giờ trong lúc cuộn.

  • 11Commit React cho 3000 ký tự truyền dần

    MotionStream nối thẳng ký tự và gộp vào React vài lần mỗi giây.

01Dễ nhất

Một thẻ và dữ liệu của bạn

Mỗi component tự hoạt động: không provider, component bọc hay lời gọi thiết lập. Các bộ sưu tập nhận items và renderItem, còn bố cục, văn bản và kiểu dáng vẫn là của bạn.

  • Import một component và truyền giá trị. Toàn bộ việc tích hợp chỉ có vậy.
  • Danh sách, tab và pager đọc mảng của bạn; key mặc định là item.id.
  • Văn bản vẫn là văn bản thật: xuống dòng, co giãn theo phông chữ và chọn được.
  • <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} />;

Sáu component trực tiếp, và một dòng mã đằng sau mỗi cái.

Đang chuẩn bị ví dụ…

02Nhanh nhất

Trình duyệt phát. React đứng yên.

Trên web không cần tải thư viện hoạt ảnh nào: component giao chuyển động cho Web Animations API, nên một con số đang cuộn hay một bảng đang đổi kích thước không tốn JavaScript mỗi khung hình và không render React khi chuyển động.

  • 0 callback khung hình JS khi 12 hoạt ảnh chạy cùng lúc.
  • Một commit React cho mỗi lần đổi giá trị, không phải mỗi khung hình.
  • Văn bản truyền dần: 11 commit React cho 3000 ký tự. Ví dụ bên dưới tự đếm số lần render của nó.

Đang chuẩn bị ví dụ…

03Ổn định nhất

Ngắt bất cứ thứ gì. Không bao giờ nhảy.

Mỗi giá trị mới bắt đầu từ những gì đang trên màn hình và lò xo giữ nguyên tốc độ, nên những cú nhấp nhanh, dữ liệu dồn dập hay đổi chiều đều trông có chủ đích. Khi chuyển động kết thúc, không còn gì chạy.

  • Con số không bao giờ bị tách rời: các chữ số còn lại trượt trong lúc cuộn.
  • 200 giá trị mới cách nhau 5 ms: sau đó còn 0 hoạt ảnh và văn bản cuối chính xác.
  • An toàn với React StrictMode. Trong ứng dụng React Native chạy nền, chuyển động về thẳng trạng thái cuối.

Đang chuẩn bị ví dụ…

16 component, nhóm theo việc chúng làm

Số và văn bản, nội dung đổi kích thước, lựa chọn, danh sách, cử chỉ, lớp phủ và tiến độ. Mỗi cái có một bàn làm việc trực tiếp với props bên cạnh.

Tất cả component

Cùng một import trên web và React Native

Metro chọn bản hiện thực native, còn bundler web chọn bản DOM. Mỗi nền tảng phát chuyển động theo cách tốt nhất của mình.

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} />
    </>
  );
}
PhầnWebReact Native
Transform và độ mờWeb Animations API, lò xo được lấy mẫu giải tíchAnimated với native driver
Chiều rộng và chiều caoWeb Animations APIAnimated với JS driver, vì đây là bố cục
Văn bản truyền dầnKý tự được nối và hiện dần; vài lần render React mỗi giâyText thật, hiện ra không có hiệu ứng mờ
Sheet và thu phóngdialog native ở top layerModal trong suốt; nút quay lại sẽ đóng nó

Bắt đầu trong hai phút

Cài đặt, import một component, truyền giá trị.

npm install @kkwaenggwari/animated-chorus

Tìm kiếm

Gõ để tìm trong tài liệu.