1. useEffect?

  - React Hook의 한 종류, side effect를 처리하기 위하여 사용한다.

  - useState처럼 state 변경이 감지되면 리렌더링을 하는 사이드 이펙트를 처리하기 위하여 사용한다.

  - 리랜더링과 무관한 작업, 데이터 비동기 호출 등의 기능을 구현할 때 사용한다.

  - ** useEffect는 콜백함수와 deps가 있던 없던, 랜더링 된 후 최초 1번만 실행된다.

 

2. 사용법과 동작방식

  - 콜백함수와 deps가 모두 있을 때

useEffect(()=>{.. }, deps)

  > deps(=의존성 배열)의 값이 변경될 때를 감지하여, 콜백함수를 실행한다.

 

  - deps가 없을 때 

useEffect(()=>{.. })

  > 모든 변경을 감지하여 실행한다.

 

  - deps가 빈 배열 [] 일때

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

  > 한번만 실행되고, 그 이후 전혀 실행되지 않음.

 

3. 예제

import "./App.css";
import Viewer from "./components/Viewer";
import Controller from "./components/Controller";
import { useEffect, useState } from "react";

function App() {
  const [count, setCount] = useState(0);
  const [input, setInput] = useState("");
  
  useEffect(() => {
    console.log(`count: ${count} / input: ${input}`);
  }, [count, input]); // 의존성 배열, deps(=dependency array)
  
  const onClickButton = (value) => {
    setCount(count + value);
    console.log(count); // 이전의 값이 출력되므로 여기다가 사용하면 안됨, useEffect를 통해서 변경된 스테이트 값을 이용해야함
  };

  return (
    <div className="App">
      <h1>Simple Counter</h1>
      <section>
        <input value={input} onChange={(e)=>{
          setInput(e.target.value);
        }} />
      </section>
      <section>
        <Viewer count={count} />
      </section>
      <section>
        <Controller onClickButton={onClickButton} />
      </section>
    </div>
  );
}

export default App;

+ Recent posts