मैंने रिएक्ट में एक घटक बनाया है जो लंबन प्रभाव बनाने के लिए विंडो स्क्रॉल पर अपनी शैली को अपडेट करने वाला है।
घटक 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 द्वारा दिखाया गया है, आपको अपने ईवेंट बाइंडिंग को बनाने और निकालने के लिए दिए गए रिएक्ट जीवनचक्र के तरीकों का उपयोग करना चाहिए। यह इसे घटक के अंदर स्व-सम्मिलित करता है और सुनिश्चित करता है कि इवेंट बाइंडिंग को हटा दिया गया है या नहीं, यह सुनिश्चित करने से कोई लीक नहीं होता है।