我在React中构建了一个组件,该组件应该在窗口滚动时更新其自身的样式以创建视差效果。
组件render
方法如下所示:
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>
);
}
这是行不通的,因为React不知道组件已更改,因此该组件不会重新渲染。
我试过itemTranslate
在组件状态下存储的值,并setState
在滚动回调中调用。但是,这使滚动无法使用,因为这非常慢。
关于如何执行此操作的任何建议?
render
在同一线程中调用的任何其他自定义方法)应仅与涉及在React中渲染/更新实际DOM的逻辑有关。相反,如下面的@AustinGreco所示,您应该使用给定的React生命周期方法创建和删除事件绑定。这使得它在组件内部是独立的,并且通过确保在卸载使用它的组件时/删除事件绑定来确保不泄漏。