React · React Native · 16 komponent

Obtížné interakce, hotové.

Animated Chorus je sada pohybových komponent pro interakce, které je těžké udělat správně ručně: rolující čísla, streamovaný text, výměny se změnou velikosti, sheety, pagery, akce přejetím a seznamy, které animují jen to, co se změnilo. Jeden tag a vaše data. Žádný provider, žádné nastavení.

Instalace
npm install @kkwaenggwari/animated-chorus

Změřeno na tomto sestavení

Chrome, 2026-09-28. Všechny podmínky a vzorky jsou v průvodci výkonem. Jak se měřilo

  • 28.0KBKB gzip pro všech 16 exportů

    Celý webový vstupní bod, minifikovaný. React je jediná peer závislost.

  • 0Callbacky snímků JS během animace

    Číslo, výška a zvýraznění se mění společně: prohlížeč přehrává všech 12 animací.

  • 1Commit Reactu na změnu hodnoty

    MotionNumber se renderuje, když se hodnota změní, nikdy během rolování.

  • 11Commity Reactu pro 3000 streamovaných znaků

    MotionStream připojuje znaky přímo a do Reactu je předává jen několikrát za sekundu.

01Nejsnazší

Jeden tag a vaše data

Každá komponenta funguje sama: žádný provider, obalová komponenta ani volání nastavení. Kolekce přijímají items a renderItem a vaše rozvržení, texty i styly zůstávají vaše.

  • Naimportujte jednu komponentu a předejte hodnotu. To je celá integrace.
  • Seznamy, karty a pagery čtou vaše pole; klíče jsou ve výchozím stavu item.id.
  • Text zůstává skutečným textem: zalamuje se, škáluje s písmem a dá se označit.
  • <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} />;

Šest živých komponent a jediný řádek kódu za každou z nich.

Příprava příkladu…

02Nejrychlejší

Přehrává prohlížeč. React stojí.

Na webu není potřeba načítat žádnou knihovnu animací: komponenty předávají pohyb Web Animations API, takže rolující číslo nebo panel měnící velikost nestojí během pohybu žádný JavaScript na snímek ani render Reactu.

  • 0 callbacků snímků JS, zatímco 12 animací běží společně.
  • Jeden commit Reactu na změnu hodnoty, ne jeden na snímek.
  • Streamovaný text: 11 commitů Reactu pro 3000 znaků. Příklad níže počítá své vlastní rendery.

Příprava příkladu…

03Nejstabilnější

Přerušte cokoli. Nic neskáče.

Každá nová hodnota začíná od toho, co je na obrazovce, a pružiny si zachovávají rychlost, takže rychlá kliknutí, nárazy dat i obraty působí záměrně. Když pohyb skončí, nic dál neběží.

  • Čísla se nikdy nerozpadnou: zbývající řády klouzají, zatímco rolují.
  • 200 nových hodnot po 5 ms: potom zbývá 0 animací a přesný konečný text.
  • Bezpečné v React StrictMode. V aplikaci React Native na pozadí dosedne pohyb do koncového stavu.

Příprava příkladu…

16 komponent seskupených podle úlohy

Čísla a text, obsah měnící velikost, výběr, seznamy, gesta, překryvy a průběh. Každá má živý pracovní stůl s props po straně.

Všechny komponenty

Stejný import na webu i v React Native

Metro vybere nativní implementaci a webové bundlery verzi pro DOM. Každá platforma přehrává pohyb tak, jak to umí nejlépe.

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} />
    </>
  );
}
ČástWebReact Native
Transformace a opacityWeb Animations API, pružiny vzorkované analytickyAnimated s nativním driverem
Šířka a výškaWeb Animations APIAnimated s driverem JS, protože jde o rozvržení
Streamovaný textZnaky se připojují a plynule objevují; několik renderů Reactu za sekunduSkutečný Text, odhalený bez prolnutí
Sheety a zoomNativní dialog v horní vrstvěPrůhledný Modal; zavře ho tlačítko zpět

Začněte za dvě minuty

Nainstalujte, naimportujte jednu komponentu, předejte hodnotu.

npm install @kkwaenggwari/animated-chorus

Hledat

Pište a hledejte v dokumentaci.