Eu construí um componente no React que deveria atualizar seu próprio estilo no scroll da janela para criar um efeito de paralaxe.
O rendermétodo component se parece com o seguinte:
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>
);
}
Isso não funciona porque o React não sabe que o componente foi alterado e, portanto, o componente não é renderizado novamente.
Tentei armazenar o valor itemTranslateno estado do componente e chamar setStateo retorno de chamada de rolagem. No entanto, isso torna a rolagem inutilizável, pois é muito lenta.
Alguma sugestão de como fazer isso?
renderno mesmo encadeamento) devem se preocupar apenas com a lógica referente à renderização / atualização do DOM real no React. Em vez disso, como mostrado por @AustinGreco abaixo, você deve usar os métodos de ciclo de vida React fornecidos para criar e remover sua ligação de evento. Isso o torna independente dentro do componente e garante que não haja vazamentos, certificando-se de que a ligação do evento seja removida se / quando o componente que o usa estiver desmontado.