• 카테고리

    질문 & 답변
  • 세부 분야

    프론트엔드

  • 해결 여부

    미해결

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

23.04.05 15:42 작성 23.04.05 15:45 수정 조회수 436

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

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

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

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

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

 

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

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

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

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

 

감사합니다.