Vodniki · 01

Vrednosti in slog

Imejte vrednost v komponenti, izpeljite izhode s calc() in izberite, kam se zapiše spremenljivka CSS.

Lastništvo vrednosti

useAnimatedValue(initial) ustvari Value, ki pripada komponenti. Uporabite število ali zapis, kot je { x: 0, opacity: 1 }, katerega polja so ločene vrednosti.

V navadnem style je vrednost hooka žeton var(--kkwa-…, initial). Posodobitve zapišejo to spremenljivko na elemente, ki jo uporabljajo; React ne upodablja.

Pripravljanje primera …

Izpeljava s calc()

Interpolacija brez easinga ter add, subtract, multiply ali divide s konstanto postanejo natančni izrazi calc() iste spremenljivke. Izračuna jih brskalnik; zanje se v nobeni sličici ne izvaja 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})` }} />;

Pripravljanje primera …

Barve in lastni izračuni

Barv, interpolacij z easingom, modulo, diffClamp in AnimatedComputed ni mogoče zapisati kot calc(). useAnimatedCSS(node) jim da lastno spremenljivko CSS, ki jo posodablja JavaScript, z enako življenjsko dobo kot komponenta.

Uporaba takega vozlišča neposredno v style vrže napako, zato strošek nikoli ni skrit.

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 }} />;

Naj ima hook recept v lasti

useAnimated(initial, factory, deps) ima v lasti vrednost in vsak krmilnik, ki je sinhrono deklariran v factoryju. Zažene se ob priklopu, znova se zažene, ko se odvisnost spremeni, in se ustavi ob odklopu.

Za predvajanje, ki ga upravljajo dogodki, podajte { autoStart: false }, nato na vrnjeni vrednosti pokličite start(), stop() ali 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))` }} />;

En zapis za veliko elementov

Privzeto spremenljivko dobi vsak element, katerega vrstični slog uporablja vrednost. S scope se spremenljivka zapiše enkrat na vsebnik in jo podedujejo njegovi otroci: prava izbira za stotine elementov.

AnimatedProvider scope={ref} nastavi privzeti scope za vse vrednosti hookov pod njim.

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>;

Branje vrednosti v JavaScriptu

getValue() vrne posnetek brez naročnine Reacta. useAnimatedListener(node, fn) vas pokliče ob vsaki spremembi in poslušalca odstrani ob odklopu. Uporabite ga za risanje na canvas ali analitiko, ne za upodabljanje.

Iskanje

Tipkajte za iskanje po dokumentaciji.