வழிகாட்டிகள் · 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 வரைதல் அல்லது பகுப்பாய்வுக்குப் பயன்படுத்துங்கள்.