혼자 적어보는 노트

[React] useEffect hook 본문

React

[React] useEffect hook

jinist 2021. 11. 12. 05:46

UseEffect

 

class 컴포넌트에 사용하는 Lifecycle hook처럼

class 컴포넌트를 사용하지 않아도

componentDidMount(),

componentWillUnmount(),

componentDidUpdate() 와 같은 기능을 사용할 수 있게 만들어주는 hook이다.

 

Effect Hook을 사용하면 함수 컴포넌트에서도 side effect를 사용할 수 있다.

 

 

기본 사용법

useEffect(() => {
	
});

useEffect 안에 코드를 적으면 컴포넌트가 mount되었을 때와 이 후 update될 때 마다 실행된다.

 

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

function Example(){
    const [welcome, setWelcome] = useState(false);

    useEffect( () =>{
        setWelcome(true);
    });
    
    return(
        <div>
            { welcome ? <h1>Welcome</h1> : null }
        </div>
    )
}

예를들어 welcome이 true일 때 <h1>이 보여지게 짠 코드이다.

default값은 false지만 useEffect에서 true로 설정하여 브라우저에서는 Welcome이 노출되는 것을 확인할 수 있다.

 

하지만 이렇게 설정하면 컴포넌트 안에서 이루어지는 모든 update에서도 해당 useEffect가 실행이 된다.

 

특정 State가 Update될 때만 실행하기.

useEffect( ()=>{
	
}, [실행 조건]);

useEffect는 첫번째 인자로 콜백함수, 두번째 인자로는 실행 조건을 입력받는데,

이렇게 뒤에 []대괄호 안에 조건을 넣어주면 특정 state가 변경 될 때만 실행이 된다.
* 해당 코드는 state를 선언한 코드 아래에 넣어주어야 함.

state를 복수로 입력하고 싶을 땐  [,] 를 사용하여 추가 가능.

 

  const hello = () => console.log('Hello');
  useEffect(hello, [실행 조건]);

위와 같이 같단하게 요청 할 수도 있다.

 

Mount시 1번만 실행

useEffect( ()=>{
	
}, []);

위와 같이 [] 빈칸으로 입력 시 해당 UseEffec안의 코드가 컴포넌트 로드 시에 한번만 실행된다.

 

 

Unmount시 실행 (컴포넌트를 벗어 났을 때)

useEffect(()=>{
   return function unMount() { 코드 작성 }
});

useEffect 안에서 함수 하나를 return 해 주면
컴포넌트가 사라질 때 코드를 실행시킬 수 있다.

함수명은 마음대로 설정할 수 있다.

 

 

*useEffect return활용

 

function Example(){
    const [welcome, setWelcome] = useState(true);

    useEffect( () =>{
        let welcomePopup = setTimeout(()=>{
            setWelcome(false);
        }, 3000);

        return ()=>{
            clearTimeout(welcomePopup);
        }
    },[]);
    
    return(
        <div>
            { welcome ? <h1>Welcome</h1> : null }
        </div>
    )
}

setTimeout을 사용하여 페이지 mount 후 3초 뒤에 welcome이 없어지는 코드를 작성했다.

하지만 3초 전에 페이지 이동을 하거나 등 변경 사항시에 에러가 생길 수 있는데

return을 이용하여 unmount시에 clearTimeout을 사용하여 초기화를 해 주었다.

이와 같이 페이지 이동시 초기화 및 다른 설정을 해주어야 하는 것들에 대해 응용하여 사용하면 될 것 같다.

 

 

좀 더 자세한 것은 아래의 링크

 

https://ko.reactjs.org/docs/hooks-effect.html

 

Using the Effect Hook – React

A JavaScript library for building user interfaces

ko.reactjs.org

 

Comments