J'ai construit un composant dans React qui est censé mettre à jour son propre style sur le défilement de la fenêtre pour créer un effet de parallaxe.
La render
méthode du composant ressemble à ceci:
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>
);
}
Cela ne fonctionne pas car React ne sait pas que le composant a changé, et par conséquent, le composant n'est pas rendu.
J'ai essayé de stocker la valeur de itemTranslate
dans l'état du composant et d'appelersetState
le rappel de défilement. Cependant, cela rend le défilement inutilisable car il est terriblement lent.
Une suggestion sur la façon de procéder?
render
dans le même thread) ne devraient être concernées que par la logique relative au rendu / mise à jour du DOM réel dans React. Au lieu de cela, comme indiqué par @AustinGreco ci-dessous, vous devez utiliser les méthodes de cycle de vie React données pour créer et supprimer votre liaison d'événement. Cela le rend autonome à l'intérieur du composant et garantit l'absence de fuite en s'assurant que la liaison d'événement est supprimée si / lorsque le composant qui l'utilise est démonté.