Zbudowałem komponent w Reakcie, który ma aktualizować swój własny styl przy przewijaniu okna, aby stworzyć efekt paralaksy.
Metoda komponentu renderwygląda następująco:
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>
);
}
To nie działa, ponieważ React nie wie, że komponent się zmienił i dlatego komponent nie jest ponownie renderowany.
Próbowałem zapisać wartość itemTranslatew stanie komponentu i wywołać setStatewywołanie zwrotne przewijania. Jednak to sprawia, że przewijanie jest bezużyteczne, ponieważ jest strasznie wolne.
Jakieś sugestie, jak to zrobić?
renderw tym samym wątku) powinny zajmować się tylko logiką związaną z renderowaniem / aktualizowaniem rzeczywistego DOM w React. Zamiast tego, jak pokazano poniżej @AustinGreco, powinieneś użyć podanych metod cyklu życia Reacta, aby utworzyć i usunąć powiązanie zdarzenia. Dzięki temu jest on samowystarczalny wewnątrz składnika i zapewnia brak wycieków, upewniając się, że powiązanie zdarzenia zostanie usunięte, jeśli / kiedy składnik, który go używa, zostanie odmontowany.