React · React Native · 16 компонентов

Сложные взаимодействия — уже готовы.

Animated Chorus — набор компонентов анимации для взаимодействий, которые трудно сделать правильно вручную: прокручивающиеся числа, потоковый текст, смены с изменением размера, шторки, пейджеры, действия по свайпу и списки, которые анимируют только изменившееся. Один тег и ваши данные. Без provider и без настройки.

Установка
npm install @kkwaenggwari/animated-chorus

Измерено на этой сборке

Chrome, 2026-09-28. Все условия и замеры — в руководстве по производительности. Как измеряли

  • 28.0KBKB gzip за все 16 экспортов

    Вся веб-точка входа, минифицированная. Единственная peer-зависимость — React.

  • 0Колбэков кадров JS во время анимации

    Число, высота и подсветка меняются вместе: браузер воспроизводит все 12 анимации.

  • 1Коммит React на изменение значения

    MotionNumber перерисовывается, когда меняется значение, и никогда — пока оно прокручивается.

  • 11Коммитов React на 3000 потоковых символов

    MotionStream добавляет символы напрямую и передаёт их в React несколько раз в секунду.

01Проще всего

Один тег и ваши данные

Каждый компонент работает сам по себе: без provider, компонента-обёртки и вызова настройки. Коллекции принимают items и renderItem, а раскладка, тексты и стили остаются вашими.

  • Импортируйте компонент и передайте значение. Это вся интеграция.
  • Списки, вкладки и пейджеры читают ваш массив; ключи по умолчанию — 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 Animations API, поэтому прокручивающееся число или меняющая размер панель не стоят ни JavaScript на кадр, ни рендера React, пока движутся.

  • 0 колбэков кадров JS, пока одновременно идут 12 анимации.
  • Один коммит React на изменение значения, а не на каждый кадр.
  • Потоковый текст: 11 коммитов React на 3000 символов. Пример ниже считает собственные рендеры.

Подготовка примера…

03Надёжнее всего

Прерывайте что угодно. Ничто не прыгает.

Каждое новое значение начинается с того, что на экране, а пружины сохраняют скорость, поэтому быстрые нажатия, всплески данных и развороты выглядят намеренными. Когда движение заканчивается, ничего не остаётся запущенным.

  • Числа никогда не разваливаются: оставшиеся разряды сдвигаются, пока прокручиваются.
  • 200 новых значений с интервалом 5 мс: после них осталось анимаций — 0, и итоговый текст точен.
  • Безопасно в React StrictMode. В фоновом приложении React Native движение сразу приходит в конечное состояние.

Подготовка примера…

16 компонентов, сгруппированных по задачам

Числа и текст, содержимое с меняющимся размером, выбор, списки, жесты, оверлеи и прогресс. У каждого есть живой стенд с props сбоку.

Все компоненты

Один импорт в вебе и React Native

Metro выбирает нативную реализацию, а веб-сборщики — реализацию для 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} />
    </>
  );
}
ЧастьВебReact Native
Transform и opacityWeb Animations API, пружины рассчитываются аналитическиAnimated с нативным драйвером
Ширина и высотаWeb Animations APIAnimated с драйвером JS, потому что это раскладка
Потоковый текстСимволы добавляются и плавно появляются; несколько рендеров React в секундуНастоящий Text, появляется без затухания
Шторки и увеличениеНативный dialog в верхнем слоеПрозрачный Modal; закрывается кнопкой «Назад»

Начните за две минуты

Установите, импортируйте компонент, передайте значение.

npm install @kkwaenggwari/animated-chorus

Поиск

Начните вводить, чтобы искать в документации.