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 라이프 사이클 메소드를 사용하여 이벤트 바인딩을 작성하고 제거해야합니다. 이렇게하면 구성 요소 내부에 자체적으로 포함되며 구성 요소를 사용하는 구성 요소를 마운트 해제 할 때 / 언제든지 이벤트 바인딩을 제거하여 누출을 방지 할 수 있습니다.