Ich habe in React eine Komponente erstellt, die ihren eigenen Stil beim Scrollen im Fenster aktualisieren soll, um einen Parallaxeeffekt zu erzeugen.
Die Komponentenmethode rendersieht folgendermaßen aus:
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>
);
}
Dies funktioniert nicht, da React nicht weiß, dass sich die Komponente geändert hat, und daher die Komponente nicht erneut gerendert wird.
Ich habe versucht, den Wert von itemTranslateim Status der Komponente zu speichern und setStateden Scroll-Rückruf aufzurufen . Dies macht das Scrollen jedoch unbrauchbar, da dies sehr langsam ist.
Irgendwelche Vorschläge, wie das geht?
renderim selben Thread aufrufen ) sollten sich nur mit der Logik befassen, die sich auf das Rendern / Aktualisieren des tatsächlichen DOM in React bezieht. Stattdessen sollten Sie, wie von @AustinGreco unten gezeigt, die angegebenen React-Lebenszyklusmethoden verwenden, um Ihre Ereignisbindung zu erstellen und zu entfernen. Dies macht es in der Komponente in sich geschlossen und stellt sicher, dass kein Leck auftritt, indem sichergestellt wird, dass die Ereignisbindung entfernt wird, wenn die Komponente, die sie verwendet, nicht gemountet ist.