Netflix nav.js useEffect에 관한 질문이 있습니다.
224
작성한 질문수 3
안녕하세요.
useEffect에 관한 질문이 있습니다.
import React, { useState, useEffect } from "react";
import "./Nav.css";
const Nav = () => {
const [show, setShow] = useState(false);
useEffect(() => {
window.addEventListener("scroll", () => {
console.log(window.scrollY);
if (window.scrollY > 50) {
setShow(true);
} else {
setShow(false);
}
});
return () => {
window.removeEventListener("scroll", () => {});
};
}, []);
return (
<nav className={`nav ${show && "nav__black"}`}>
<img
alt="Neflix logo"
src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTs-jOdZ58Y8HbxPbaUxxaUyGMqu3zvtO8frCdL_3MzPE6cOB5ZAV5TqwRIjJ6sdTl-_A&usqp=CAU"
className="nav__logo"
onClick={() => window.location.reload()}
/>
<img
alt="user logged"
src="http://zoeice.com/assets/img/uploads/profile.png"
className="nav__avatar"
/>
</nav>
);
};
export default Nav;질문 1.
useEffect 내부의 return은 컴포넌트를 사용하지 않을때 실행되는 코드를 넣는것 같은데
이점이 조금 이해하기 어려워서 질문드립니다. useEffect안의 return의 역할이 정확히 무엇인가요?
질문 2.
useEffect의 두번째 인자로 빈 배열을 받을 경우, 처음 컴포넌트가 처음 렌더링 될때만
실행된다고 알고 있습니다.
그런데 nav는 스크롤 상태에 따라서 계속 이벤트가 실행되는데 빈 배열을 넣어도 잘 작동이 되고 있습니다.
빈 배열을 넣어도 잘 작동되는 이유가 궁금합니다.
답변부탁드리겠습니다.
감사합니다.
답변 1
1
안녕하세요!!
현재 "스크롤"이라는 이벤트가 발생하면 어떠한 함수를 호출할 건지 리스너를 등록해준 것입니다.
이것을 이벤트 리스너 등록이라고 하는데 이 리스너를 등록했기 때문에 마우스 스크롤을 할 때마다 함수가 호출된 것입니다.
근데 이 해당 컴포넌트를 사용하지 않는데 이 리스너가 계속 등록되어있으면 안 되겠죠?!!
그렇기 때문에 이 리스너를 제거해주는 부분입니다.
결론적으로 첫번째 질문에 답변인 Return 부분은 해당 컴포넌트가 사라질때 호출되는 부분입니다.
그래서 여기서는 컴포넌트를 사용하지 않게 될 때 스크롤에 대한 이벤트가 발생할 때 호출되는 함수를 더 이상 호출되지 않게 해당 이벤트 리스너를 지워주는 부분입니다.
두번째 질문은 컴포넌트가 생성될 때 리스너는 한번만 등록해주면 됩니다.
리스너라는 것은 listener 라는 말처럼 어떠한 이벤트가 일어나는 것을 계속 지켜보고 있는 것입니다.
컴포넌트가 생성될 때 한번만 등록을 해주면 됩니다.
감사합니다.
강의 소스 코드 압축 풀기 오류
0
90
1
런타임 에러 ㅠㅠ
0
105
1
강의대로 따라갔는데 에러보다 api키로 들어간 넷플릭스? 그런게 렌더링 되지 않습니다 ㅠ
0
114
1
안녕하세요 개발과 상관없는 질문입니다만
0
123
1
리액트 라우터 관련
0
119
1
react-beatiful-dnd에서 문제가 발생합니다.
0
108
1
react19에서는 react-beautiful-dnd가 설치되지 않습니다.
0
833
1
useEffect로 사용을 해도 되나요?
0
210
1
넷플릭스 오리지널 제외하고 슬라이드가 동작을 안합니다.
0
202
1
react 19의 useActionState가 더이상 isPending은 지원하지 않는 듯합니다
0
287
2
리액트 dockderfile 작성 시 COPY 질문
0
156
1
next.js에서부터는 react query 필요없는지
0
327
1
기능
0
204
1
오류가 안보여요
0
206
1
CSS
0
225
1
local storage
0
223
1
list컴포넌트 생성하기
0
230
1
검색어 입력 후 초기화하는 방법 궁금합니다!
0
343
1
Banner.css에 대해서
0
464
1
플러그인이 추천을 안해줍니다
0
334
1
마이너스버튼 테스트
0
285
2
리액트 서버 실행 오류
0
1169
2
오류메세지는 확인했는데 어떻게 고쳐야 할지 모르겠습니다 ㅠ
0
307
1
creactStore질문이요
1
293
2





