Ho creato un componente in React che dovrebbe aggiornare il suo stile sullo scroll della finestra per creare un effetto di parallasse.
Il render
metodo del componente è simile al seguente:
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>
);
}
Questo non funziona perché React non sa che il componente è stato modificato, quindi il componente non viene reso nuovamente.
Ho provato a memorizzare il valore di itemTranslate
nello stato del componente e a chiamare setState
il callback di scorrimento. Tuttavia, ciò rende lo scorrimento inutilizzabile poiché è terribilmente lento.
Qualche suggerimento su come farlo?
render
nello stesso thread) dovrebbero riguardare solo la logica relativa al rendering / aggiornamento del DOM effettivo in React. Invece, come mostrato da @AustinGreco di seguito, è necessario utilizzare i metodi del ciclo di vita di React forniti per creare e rimuovere l'associazione di eventi. Ciò lo rende autonomo all'interno del componente e garantisce l'assenza di perdite assicurandosi che l'associazione di eventi sia rimossa se / quando il componente che lo utilizza è smontato.