인프런 커뮤니티 질문&답변

min Clap님의 프로필 이미지
min Clap

작성한 질문수

처음 만난 리액트(React)

(실습) Hooks 사용해보기

컴포넌트 재 렌더링 과정이 궁금합니다.

작성

·

505

·

수정됨

0

안녕하세요 소플님!

감사하게도 강의 너무 잘 듣고 있습니다!


강의에서 알려주신 Accommodate function component 코드 제일 상단에 아래 처럼 로그를 찍도록 선언을 했는데요.

function Accommodate(prop) {
    console.log("Accommodate created!!!")
    const [isFull, setIsFull] = useState(false);
    const [count, increaseCount, decreaseCount] = useCounter(0);

    useEffect(() => {
        console.log("======================");
        console.log("useEffect() is called.");
        console.log(`isFull: ${isFull}`);
    });
//이후 생략
}

최초에 화면을 그린 로그는 아래처럼 나오고 있는데

Accommodate created!!!
======================
useEffect() is called.
isFull: false
Current count value: 0

 

입장 버튼을 누르고난 뒤에는 Accommodate created!!!로그가 마지막에 한번씩 더 찍히더라구요.

count가 변경이 됐기 때문에 Accommdate를 재렌더링 했고 그 과정에서 1번 useEffect에 선언한 함수가 호출되고

count가 변경됐기 때문에 2번 useEffect에 선언한 함수가 호출되는건 알겠는데,

최상단에 작성한 로그가 다시 찍히는 이유가 어떤거 인가요??

Accommodate created!!!
======================
useEffect() is called.
isFull: false
Current count value: 1
Accommodate created!!!

재렌더링이 또 된거라고 봐야하는걸까요..?!

답변 1

0

Inje Lee (소플)님의 프로필 이미지
Inje Lee (소플)
지식공유자

안녕하세요, 소플입니다.

현재 코드에 작성하신 아래 로그는,

함수 컴포넌트의 최상단 레벨에 위치해 있기 때문에 컴포넌트가 재렌더링 될 때마다 매번 호출된다고 보시면 됩니다.

console.log("Accommodate created!!!")

 

만약 컴포넌트가 처음 mount 되는 시점과 unmount되는 시점에만 로그를 찍게 하고 싶다면,

아래와 같이 useEffect() 훅을 사용하되 dependency array를 empty array(빈 배열)로 하여 로그를 찍어보시면 됩니다!

useEffect(() => {
    console.log("Accommodate mounted!");

    return () => {
        console.log("Accommodate will unmount!");
    }
}, [])

 

감사합니다.

min Clap님의 프로필 이미지
min Clap

작성한 질문수

질문하기