గైడ్లు · 01
విలువలు, style
కాంపోనెంట్లో విలువను కలిగి ఉండండి, calc()తో అవుట్పుట్లు పొందండి, CSS వేరియబుల్ ఎక్కడ రాయబడుతుందో ఎంచుకోండి.
విలువను కలిగి ఉండటం
useAnimatedValue(initial) కాంపోనెంట్కు చెందిన Value-ను సృష్టిస్తుంది. ఒక సంఖ్యను, లేదా ఫీల్డ్లు విడి విలువలుగా ఉండే { x: 0, opacity: 1 } వంటి record-ను వాడండి.
సాధారణ style-లో హుక్ విలువ var(--kkwa-…, initial) అనే టోకెన్. నవీకరణలు దాన్ని వాడే ఎలిమెంట్లపై ఆ వేరియబుల్ను రాస్తాయి; React రెండర్ కాదు.
ఉదాహరణ సిద్ధమవుతోంది…
calc()తో పొందడం
easing లేని interpolation, స్థిరాంకంతో add, subtract, multiply లేదా divide అదే వేరియబుల్ యొక్క ఖచ్చితమైన calc() వ్యక్తీకరణలుగా మారతాయి. బ్రౌజర్ వాటిని లెక్కిస్తుంది; ఫ్రేమ్కు వాటి కోసం JavaScript నడవదు.
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})` }} />;ఉదాహరణ సిద్ధమవుతోంది…
రంగులు, కస్టమ్ గణనలు
రంగులు, easing ఉన్న interpolation-లు, modulo, diffClamp, AnimatedComputed-ను calc()గా రాయలేము. useAnimatedCSS(node) వాటికి JavaScript నవీకరించే సొంత CSS వేరియబుల్ను, అదే కాంపోనెంట్ జీవితకాలంతో ఇస్తుంది.
అలాంటి node-ను నేరుగా style-లో వాడితే లోపం విసరబడుతుంది; అందువల్ల ఖర్చు ఎప్పుడూ దాగదు.
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 }} />;రెసిపీని హుక్కు అప్పగించండి
useAnimated(initial, factory, deps) విలువను, factory-లో synchronousగా ప్రకటించిన ప్రతి కంట్రోలర్ను కలిగి ఉంటుంది. మౌంట్పై ప్రారంభమవుతుంది, ఆధారం మారినప్పుడు మళ్లీ ప్రారంభమవుతుంది, అన్మౌంట్పై ఆగుతుంది.
ఈవెంట్ ఆధారిత ప్లేబ్యాక్ కోసం { autoStart: false } ఇచ్చి, తిరిగి వచ్చిన విలువపై start(), stop() లేదా reset() కాల్ చేయండి.
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))` }} />;అనేక ఎలిమెంట్లకు ఒకసారి రాయండి
డిఫాల్ట్గా, inline style-లో విలువను వాడే ప్రతి ఎలిమెంట్ వేరియబుల్ను పొందుతుంది. scopeతో, వేరియబుల్ ఒక కంటైనర్పై ఒకసారి రాయబడి దాని పిల్లలకు వారసత్వంగా వెళ్తుంది: వందల ఎలిమెంట్లకు సరైన ఎంపిక.
AnimatedProvider scope={ref} తన కింద ఉన్న ప్రతి హుక్ విలువకు డిఫాల్ట్ scope సెట్ చేస్తుంది.
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>;JavaScript-లో విలువలను చదవడం
getValue() React-ను సబ్స్క్రైబ్ చేయకుండా స్నాప్షాట్ ఇస్తుంది. useAnimatedListener(node, fn) ప్రతి మార్పుపై మిమ్మల్ని కాల్ చేసి అన్మౌంట్పై listener-ను తీసివేస్తుంది. రెండరింగ్ కోసం కాదు, canvas డ్రాయింగ్ లేదా విశ్లేషణ కోసం వాడండి.