React/개념

useEffect - 렌더링이 일어났을 때 특정 작업 실행

_JHS_ 2024. 2. 26. 14:55

언제 사용하나?

mount (화면 첫 렌더링)
Update (다시 렌더링)
Unmount  (화면에서 사라질 때

 

위의 상황에서 => 특정 작업을 실행해주고 싶을 때 

 

 

필요에 따라서 사용법 - ( 2가지 )

1. component가 렌더링 될 때마다 useEffect 실행하고 싶을 때

 

사용법)  useEffect() 의 첫 번째 인자 함수를 준다. ( useEffect( ()=>{} ) )

import { useEffect } from "react";
function Component(){
    useEffect(()=>{
        //실행할 작업
    })
};

 

 

2. useEffect를 필요한 상황에만 실행하고 싶은 경우 

 

사용법) useEffect의 첫 번째 인자함수 + 두 번째 인자배열을 준다. ( useEffect( ()=>{} , [ ]  )  )

* 이 배열을 Dependency Array라 부른다.

 

 

2-1  화면이 첫 렌더링 됐을 때만 1번만 useEffect 실행 =>   빈 배열 인자로 주면 된다.

import { useEffect } from "react";
function Component(){
    useEffect(()=>{
        //실행할 작업
    },[]) // 첫 렌더링에만 실행됨.
};

 

 

2-2 화면이 첫 렌더링 됐을 때 + 특정 변수의 값이 변경됐을 때 useEffect 실행  => 배열에 변수를 함께 인자로 주는 경우

import { useEffect } from "react";
function Component(){
    const [count, setCount] = useState(0);

    useEffect(()=>{
        //실행할 작업
    },[count]); // 첫 렌더링 + count의 값이 변경될 경우
};

ex) setCount((count) => (count+1)) 이렇게 count가 변경될 경우 useEffect 실행

 

 

+ ( useEffect() 에서 return을 사용하는 경우)

 

UseEffect에서 return 사용 (clean up)

언제 사용하나? => Component가 Unmount(화면에서 사라질)될 때 or 다음 렌더링 될 때 해당 useEffect가 실행될 때 사용예시) 기능) - timer 버튼을 누르면 1초에 1번씩 console에 출력한다. - 다시 timer 버튼을

time-to-study.tistory.com

 

 

사용 예시) 

기능)

처음 렌더링 됐을 때 + itemCount의 값이 변경될 때 마다 =>  console 출력

import React, { useState, useEffect } from "react";

function ItemPage(){
    const [itemCount, SetItemCount] = useState(0);

    useEffect(()=>{
        console.log(`itemCount값이 ${itemCount}으로 값이 변경되었습니다.`);
    },[itemCount])
    
    const changeHandler = (e)=>{
        SetItemCount(e.target.value);
    }

    return(
        <input type="number" value={itemCount} onChange={changeHandler}/>
    )
}

export default ItemPage;

 


또 다른 문제?
여기서 처음 렌더링 시에 console.log가 2번 출력 되는건 

=> <React.StrictMode> 모드를 사용해서 그렇다. 자세한건 다음에 알아보자