Průvodci · 09
SSR, testování a produkce
Renderování na serveru, hydratace, testy a pravidla úklidu, na která se můžete spolehnout.
Renderování na serveru
Hodnoty hooků renderují svou výchozí hodnotu do serverového markupu a animace po hydrataci pokračuje. React 18 a novější používá pro stabilní názvy proměnných useId; na serverech s React 16 a 17 předejte id.
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>
);
}Stabilní id ve starších verzích Reactu
Potřeba jen při renderování na serveru s React 16 nebo 17.
// React 18+ uses useId automatically. On React 16/17 servers, pass a stable id.
const progress = useAnimatedValue(0, { id: 'hero-progress' });Úklid, na který se můžete spolehnout
Vše, co komponenta vlastní, se uvolní spolu s ní.
useAnimated,useAnimatedValue,useTimelineauseReorderpři odpojení zastaví své controllery a posluchače.- Controllery a vstupy deklarované ve factory
useAnimatedse při změně závislosti nahradí společně. Animated.Keepodstraní odcházející potomky po jejich pohybu a nová póza přeruší pohyb od aktuální polohy.- Mimo React vracejí
bind,bindOutput,createTimelineacreateLayoutSceneexplicitnídispose.
Testování
flushAnimatedUpdates() synchronně použije čekající výstup, aby deterministické testy mohly ověřovat DOM.
import { flushAnimatedUpdates } from '@kkwaenggwari/animated';
act(() => progress.setValue(0.5));
flushAnimatedUpdates();
// Pending style writes are applied now; assert on the DOM.Text, atributy a vlastnosti
output(target, mapping) uvnitř useAnimated vlastní výstup do stylu, atributu, textu nebo vlastnosti objektu. bindOutput stejné mapování připojí hned a vrací flush a dispose.
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} />;