1차 프로젝트 Day 9🔥
(스크롤 이벤트)
9는 중국식 표기법과 딱맞는 이모지가 없었다 ㅜㅜ 슬픔...
아래 굵은 글씨 부분이 내가 구현 한 /구현 할 부분
제품 상세 페이지에서 스크롤을 내리면 일정 구간에서 부터 하단에 검정 네브바가 등장 하는데, 가격, 사이즈, 장바구니 담기에 해당하는 요소를 포함하고 있었다. 이를 구현하기 위해 스크롤 이벤트를 적용하였다.
먼저 보여주거나 말거나의 요소가 될 것이므로 boolean 값으로 관리할 state
를 지정해 주어야 하고 window의 scroll event를 감지할 window.addEventListener(,) 콜백 함수
를 react lifecycle에서 render 되어야 하는 부분에 위치 시키고, addEventListner를 사용했으니 removeEventListner도 lifeCycle에 맞게 위치
시켜야 할 것이다.
this.state = {
isVisible:false
}
handleScroll
을 만들고 처음render 되고 변화된 state 값에 실행 할 수 있게 매개 변수를 두개 받는 window.addEventListener(,)함수를 ComponentDidMount함수에 위치 시켜 준다. ComponentDidMount() {
window.addEventListener("scroll", this.handleScroll);
}
항상 removeEventListner를 해주어야 불필요한 메모리 손실을 막고
계속해서 이벤트가 서버에서 돌아가고 있는 상황을 방지할 수 있다. 위치는 ComponentWillUnmoust()에
위치시킨다. componentWillUnmount() {
window.removeEventListener("scroll", this.handleScroll);
}
왜 react에서의 eventlistner를 remove 해줘야하는지 잘 설명한 포스팅
handleScroll = () => {
this.setState({
isVisible: window.pageYOffset > 500 ? true : false,
});
};
{detailData.product_size && (
<ProductBottomBar
isActive={isVisible}
price={detailData.product_price.toLocaleString()}
size={detailData.product_size}
/>
)}
<div className={`ProductBottomBar ${isActive ? "" : "hide"}`}>