He creado un componente en React que se supone que actualiza su propio estilo en el desplazamiento de la ventana para crear un efecto de paralaje.
El render
método del componente se ve así:
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>
);
}
Esto no funciona porque React no sabe que el componente ha cambiado y, por lo tanto, el componente no se vuelve a procesar.
He intentado almacenar el valor de itemTranslate
en el estado del componente y llamar setState
a la devolución de llamada de desplazamiento. Sin embargo, esto hace que el desplazamiento sea inutilizable ya que es terriblemente lento.
¿Alguna sugerencia sobre cómo hacer esto?
render
en el mismo hilo) solo deben ocuparse de la lógica relacionada con la representación / actualización del DOM real en React. En cambio, como se muestra a continuación en @AustinGreco, debe usar los métodos de ciclo de vida React para crear y eliminar el enlace de su evento. Esto lo hace autónomo dentro del componente y asegura que no haya fugas al asegurarse de que se elimine el enlace del evento si / cuando el componente que lo usa está desmontado.