గైడ్‌లు · 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 నడవదు.

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

ఉదాహరణ సిద్ధమవుతోంది…

రంగులు, కస్టమ్ గణనలు

రంగులు, easing ఉన్న interpolation-లు, modulo, diffClamp, AnimatedComputed-ను calc()‌గా రాయలేము. useAnimatedCSS(node) వాటికి JavaScript నవీకరించే సొంత CSS వేరియబుల్‌ను, అదే కాంపోనెంట్ జీవితకాలంతో ఇస్తుంది.

అలాంటి node-ను నేరుగా style-లో వాడితే లోపం విసరబడుతుంది; అందువల్ల ఖర్చు ఎప్పుడూ దాగదు.

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

రెసిపీని హుక్‌కు అప్పగించండి

useAnimated(initial, factory, deps) విలువను, factory-లో synchronous‌గా ప్రకటించిన ప్రతి కంట్రోలర్‌ను కలిగి ఉంటుంది. మౌంట్‌పై ప్రారంభమవుతుంది, ఆధారం మారినప్పుడు మళ్లీ ప్రారంభమవుతుంది, అన్‌మౌంట్‌పై ఆగుతుంది.

ఈవెంట్ ఆధారిత ప్లేబ్యాక్ కోసం { autoStart: false } ఇచ్చి, తిరిగి వచ్చిన విలువపై start(), stop() లేదా 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))` }} />;

అనేక ఎలిమెంట్లకు ఒకసారి రాయండి

డిఫాల్ట్‌గా, inline style-లో విలువను వాడే ప్రతి ఎలిమెంట్ వేరియబుల్‌ను పొందుతుంది. scope‌తో, వేరియబుల్ ఒక కంటైనర్‌పై ఒకసారి రాయబడి దాని పిల్లలకు వారసత్వంగా వెళ్తుంది: వందల ఎలిమెంట్లకు సరైన ఎంపిక.

AnimatedProvider scope={ref} తన కింద ఉన్న ప్రతి హుక్ విలువకు డిఫాల్ట్ scope సెట్ చేస్తుంది.

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

JavaScript-లో విలువలను చదవడం

getValue() React-ను సబ్‌స్క్రైబ్ చేయకుండా స్నాప్‌షాట్ ఇస్తుంది. useAnimatedListener(node, fn) ప్రతి మార్పుపై మిమ్మల్ని కాల్ చేసి అన్‌మౌంట్‌పై listener-ను తీసివేస్తుంది. రెండరింగ్ కోసం కాదు, canvas డ్రాయింగ్ లేదా విశ్లేషణ కోసం వాడండి.

వెతకండి

డాక్యుమెంటేషన్‌లో వెతకడానికి టైప్ చేయండి.