Vodiči · 01

Vrijednosti i stil

Posjedujte vrijednost u komponenti, izvodite izlaze s calc() i odaberite gdje se zapisuje CSS varijabla.

Posjedovanje vrijednosti

useAnimatedValue(initial) stvara Value koji pripada komponenti. Koristite broj ili zapis poput { x: 0, opacity: 1 } čija su polja zasebne vrijednosti.

U običnom style vrijednost hooka je token var(--kkwa-…, initial). Ažuriranja zapisuju tu varijablu na elemente koji je koriste; React ne renderira.

Priprema primjera…

Izvođenje s calc()

Interpolacija bez easinga te add, subtract, multiply ili divide s konstantom postaju točni izrazi calc() iste varijable. Izvodi ih preglednik; za njih se u svakom kadru ne izvodi JavaScript.

Slide.jsx
const progress = useAnimatedValue(0);

// A linear interpolation of a hook value is a calc() of the same CSS variable.
const x = progress.interpolate({ inputRange: [0, 1], outputRange: ['0px', '180px'] });
const half = multiply(progress, 0.5);

<div style={{ opacity: half, transform: `translateX(${x})` }} />;

Priprema primjera…

Boje i vlastiti izračuni

Boje, interpolacije s easingom, modulo, diffClamp i AnimatedComputed ne mogu se zapisati kao calc(). useAnimatedCSS(node) daje im vlastitu CSS varijablu koju ažurira JavaScript, s istim životnim vijekom kao komponenta.

Upotreba takvog čvora izravno u style baca pogrešku, pa trošak nikad nije skriven.

Glow.jsx
const progress = useAnimatedValue(0);

// Colors and eased curves are not calc() expressions: give them their own CSS value.
const color = useAnimatedCSS(
  progress.interpolate({ inputRange: [0, 1], outputRange: ['#3d3bf3', '#22b8f0'] }),
);

<div style={{ background: color }} />;

Neka hook posjeduje recept

useAnimated(initial, factory, deps) posjeduje vrijednost i svaki kontroler sinkrono deklariran u factoryju. Pokreće se pri montiranju, ponovno se pokreće kad se ovisnost promijeni i zaustavlja se pri demontiranju.

Predajte { autoStart: false } za reprodukciju upravljanu događajima, a zatim na vraćenoj vrijednosti pozovite start(), stop() ili reset().

Intro.jsx
const intro = useAnimated(
  { opacity: 0, y: 24 },
  (value) => {
    parallel([
      timing(value.opacity, { toValue: 1, duration: 400 }),
      spring(value.y, { toValue: 0, stiffness: 220, damping: 20 }),
    ]);
  },
  [],
);

<section style={{ opacity: intro.opacity, transform: `translateY(calc(${intro.y} * 1px))` }} />;

Jedan zapis za mnogo elemenata

Prema zadanom, varijablu dobiva svaki element čiji inline stil koristi vrijednost. Sa scope varijabla se zapisuje jednom na spremnik i nasljeđuju je njegova djeca: pravi izbor za stotine elemenata.

AnimatedProvider scope={ref} postavlja zadani scope za sve vrijednosti hookova ispod njega.

Field.jsx
const field = useRef(null);

// Written once on the field; every child that uses the value inherits it.
const wave = useAnimatedValue(0, { scope: field });

<div ref={field}>
  {items.map((item) => (
    <i key={item} style={{ transform: `rotate(calc(${wave} * 1turn))` }} />
  ))}
</div>;

Čitanje vrijednosti u JavaScriptu

getValue() vraća snimku bez pretplate Reacta. useAnimatedListener(node, fn) vas poziva pri svakoj promjeni i uklanja slušatelja pri demontiranju. Koristite ga za crtanje na canvas ili analitiku, ne za renderiranje.

Pretraži

Tipkajte za pretraživanje dokumentacije.