गाइड · 01

मान और स्टाइल

कंपोनेंट में मान रखें, calc() से आउटपुट निकालें और चुनें कि CSS वेरिएबल कहाँ लिखा जाए।

मान का स्वामित्व

useAnimatedValue(initial) कंपोनेंट का Value बनाता है। संख्या या { x: 0, opacity: 1 } जैसा रिकॉर्ड इस्तेमाल करें, जिसके फ़ील्ड अलग-अलग मान हैं।

सामान्य style में हुक का मान var(--kkwa-…, initial) टोकन है। अपडेट उस वेरिएबल को उसे इस्तेमाल करने वाले एलिमेंट पर लिखते हैं; React रेंडर नहीं करता।

उदाहरण तैयार हो रहा है…

calc() से निकालना

easing के बिना इंटरपोलेशन और स्थिरांक के साथ 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 वाले इंटरपोलेशन, modulo, diffClamp और AnimatedComputed को calc() के रूप में नहीं लिखा जा सकता। useAnimatedCSS(node) उन्हें JavaScript से अपडेट होने वाला अपना CSS वेरिएबल देता है, कंपोनेंट जितने ही जीवनकाल के साथ।

ऐसे नोड को सीधे 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 में सिंक्रोनस रूप से घोषित हर कंट्रोलर का मालिक है। यह माउंट पर शुरू होता है, निर्भरता बदलने पर फिर शुरू होता है और अनमाउंट पर रुकता है।

इवेंट से चलने वाले प्लेबैक के लिए { 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 स्टाइल मान इस्तेमाल करती है। scope के साथ वेरिएबल कंटेनर पर एक बार लिखा जाता है और उसके children उसे विरासत में पाते हैं: सैकड़ों एलिमेंट के लिए सही विकल्प।

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 पर ड्रॉइंग या एनालिटिक्स के लिए इस्तेमाल करें, रेंडर के लिए नहीं।

खोजें

दस्तावेज़ खोजने के लिए टाइप करें।