Guides · 09

SSR, test og produktion

Serverrendering, hydrering, tests og de oprydningsregler, du kan regne med.

Serverrendering

Hook-værdier renderer deres startværdi i serverens markup, og animationen fortsætter efter hydrering. React 18 og nyere bruger useId til stabile variabelnavne; på servere med React 16 og 17 giver du et id.

app/layout.jsx
import { AnimatedProvider } from '@kkwaenggwari/animated';

// The package entry is marked 'use client'. A server layout can render the
// provider directly; hooks and Animated.<tag> go inside Client Components.
export default function RootLayout({ children }) {
  return (
    <html lang="en">
      <body>
        <AnimatedProvider>{children}</AnimatedProvider>
      </body>
    </html>
  );
}

Stabile id'er i ældre React

Kun nødvendigt ved serverrendering med React 16 eller 17.

ssr.jsx
// React 18+ uses useId automatically. On React 16/17 servers, pass a stable id.
const progress = useAnimatedValue(0, { id: 'hero-progress' });

Oprydning, du kan regne med

Alt, hvad en komponent ejer, frigives sammen med den.

  • useAnimated, useAnimatedValue, useTimeline og useReorder stopper deres controllere og listeners ved unmount.
  • Controllere og input, der er erklæret i en useAnimated-factory, udskiftes samlet, når en afhængighed ændrer sig.
  • Animated.Keep fjerner børn, der forlader, efter deres bevægelse, og en ny pose afbryder fra den aktuelle position.
  • Uden for React returnerer bind, bindOutput, createTimeline og createLayoutScene en eksplicit dispose.

Test

flushAnimatedUpdates() anvender ventende output synkront, så deterministiske tests kan tjekke DOM'en.

Meter.test.jsx
import { flushAnimatedUpdates } from '@kkwaenggwari/animated';

act(() => progress.setValue(0.5));
flushAnimatedUpdates();
// Pending style writes are applied now; assert on the DOM.

Tekst, attributter og egenskaber

output(target, mapping) inde i useAnimated ejer et output til stil, attribut, tekst eller objektegenskab. bindOutput forbinder den samme mapping med det samme og returnerer flush og dispose.

Counter.jsx
const label = useRef(null);

const count = useAnimated(
  0,
  (value) => {
    output(label, { text: new AnimatedComputed([value], (v) => `${Math.round(v * 100)}%`) });
    timing(value, { toValue: 1, duration: 1200 });
  },
  [],
);

<span ref={label} />;

Søg

Skriv for at søge i dokumentationen.