मैंने रिएक्ट में एक घटक बनाया है जो लंबन प्रभाव बनाने के लिए विंडो स्क्रॉल पर अपनी शैली को अपडेट करने वाला है।
घटक render
विधि इस प्रकार दिखती है:
function() {
let style = { transform: 'translateY(0px)' };
window.addEventListener('scroll', (event) => {
let scrollTop = event.srcElement.body.scrollTop,
itemTranslate = Math.min(0, scrollTop/3 - 60);
style.transform = 'translateY(' + itemTranslate + 'px)');
});
return (
<div style={style}></div>
);
}
यह काम नहीं करता है क्योंकि रिएक्ट को पता नहीं है कि घटक बदल गया है, और इसलिए घटक को फिर से प्रस्तुत नहीं किया गया है।
मैंने itemTranslate
कंपोनेंट की स्थिति में, और setState
स्क्रॉल कॉलबैक में कॉलिंग का मान रखने की कोशिश की है । हालाँकि, यह स्क्रॉलिंग को अनुपयोगी बनाता है क्योंकि यह बहुत धीमा है।
यह कैसे करना है पर कोई सुझाव?
render
एक ही थ्रेड से कॉल करते हैं) केवल वास्तविक डोम को रिएक्ट में रेंडर करने / अपडेट करने से संबंधित तर्क से संबंधित होना चाहिए। इसके बजाय, जैसा कि नीचे @AustinGreco द्वारा दिखाया गया है, आपको अपने ईवेंट बाइंडिंग को बनाने और निकालने के लिए दिए गए रिएक्ट जीवनचक्र के तरीकों का उपयोग करना चाहिए। यह इसे घटक के अंदर स्व-सम्मिलित करता है और सुनिश्चित करता है कि इवेंट बाइंडिंग को हटा दिया गया है या नहीं, यह सुनिश्चित करने से कोई लीक नहीं होता है।