Vodiči · 09
SSR, testiranje i produkcija
Renderiranje na poslužitelju, hidratacija, testovi i pravila čišćenja na koja se možete osloniti.
Renderiranje na poslužitelju
Vrijednosti hookova renderiraju svoju početnu vrijednost u poslužiteljski markup, a animacija se nastavlja nakon hidratacije. React 18 i noviji koriste useId za stabilne nazive varijabli; na poslužiteljima s Reactom 16 i 17 predajte 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>
);
}Stabilni id u starijem Reactu
Potrebno samo pri renderiranju na poslužitelju s Reactom 16 ili 17.
// React 18+ uses useId automatically. On React 16/17 servers, pass a stable id.
const progress = useAnimatedValue(0, { id: 'hero-progress' });Čišćenje na koje se možete osloniti
Sve što komponenta posjeduje oslobađa se zajedno s njom.
useAnimated,useAnimatedValue,useTimelineiuseReorderpri demontiranju zaustavljaju svoje kontrolere i slušatelje.- Kontroleri i unosi deklarirani u factoryju
useAnimatedzamjenjuju se zajedno kad se ovisnost promijeni. Animated.Keepuklanja djecu koja odlaze nakon njihova pokreta, a nova poza prekida od trenutačnog položaja.- Izvan Reacta
bind,bindOutput,createTimelineicreateLayoutScenevraćaju izričitidispose.
Testiranje
flushAnimatedUpdates() sinkrono primjenjuje izlaz na čekanju kako bi deterministički testovi mogli provjeravati DOM.
import { flushAnimatedUpdates } from '@kkwaenggwari/animated';
act(() => progress.setValue(0.5));
flushAnimatedUpdates();
// Pending style writes are applied now; assert on the DOM.Tekst, atributi i svojstva
output(target, mapping) unutar useAnimated posjeduje izlaz u stil, atribut, tekst ili svojstvo objekta. bindOutput odmah povezuje isto preslikavanje i vraća flush i 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} />;