본문 바로가기
Web/React

[React] Cleanup

by _eunji_ 2022. 1. 30.

Cleanup

useEffect 사용 시 컴포넌트가 생성될 때뿐만 아니라 사라질 때도 함수를 실행시킬 수 있다.


  • useEffect 참고
 

[React] useEffect

useEffect react.js에서는 component를 새로고침 한다. 즉 새로운 데이터가 들어올 때마다 UI를 refresh 한다. 하지만 필요하지 않은 경우에는 이 장점이 문제가 될 수도 있다. 처음 실행될 때 혹은 컴포넌

yeoeun-ji.tistory.com

 

아래 코드는 Show 버튼 클릭시 Hello컴포넌트가 생성되고 Hide 버튼 클릭 시 컴포넌트가 사라지는 코드이다.

import { useState, useEffect } from "react";

function Hello(){
  return (
  <h1>Hello</h1>
  );
}
function App() {
  const[showing,setShowing]=useState(false);
  const onClick=()=>setShowing((prev)=>!prev)
 
  return (
    <div>
      {showing?<Hello/>:null}
      <button onClick={onClick}>{showing?"Hide":"Show"}</button>  
    </div>
  );
}

export default App;

결과 화면

 

Hello 컴포넌트 안 useEffect를 추가해보자.

useEffect(()=>{
    console.log("I'm here!");
  },[])

 

show 버튼을 클릭하여 hello컴포넌트를 생성할 때마다 "I'm here!" 로그가 출력되는 것을 확인할 수 있다.

 

 

useEffect 부분을 수정해보자.

 useEffect(()=>{
    console.log("created :)");
    return()=>console.log("destroyed :(");
  },[])

useEffect는 컴포넌트가 생성되고 사라질때도 코드를 실행할 수 있다.

=> 새로운 함수나 코드를 return하면 된다.

 

 

Hello 컴포넌트를 다시 정리하면 다음과 같다.

function Hello(){
  function byeFn(){
    console.log("bye :(");
  }
  function hiFn(){
      console.log("created :)");
      return byeFn;
    }
  useEffect(hiFn,[])
  return (
  <h1>Hello</h1>
  );
}

useEffect는 hiFn함수를 받고 그 함수는 dependency가 변화할 때 호출된다.

위에서 사용된 useEffect는 dependency가 빈 배열이기 때문에 처음 생성될 때 함수가 호출된 후 다시 호출되지 않는다.

컴포넌트가 파괴될때도 함수를 실행하고 싶으면 hiFn이 byeFn을 return 해주면 된다.

 

 

useEffect 사용하는 두가지 방법

 useEffect(()=>{
    console.log("hi :)")
    return ()=>console.log("bye :(")
  })

 

 useEffect(function(){
    console.log("hi :)")
    return function(){
      console.log("bye :(")
    }
  },[])

둘 다 같은 코드이지만 일반적으로 두 번째 방법은 길어서 잘 사용하지 않다고 한다.

'Web > React' 카테고리의 다른 글

[React] Publishing / GitHub Pages에 배포하기  (0) 2022.01.31
[React] useEffect  (0) 2022.01.29
[React] Component에 스타일 추가하기  (0) 2022.01.29
[React] React 시작하기  (0) 2022.01.29
[React] Props  (0) 2022.01.27

댓글