본문 바로가기

IT/React

useEffect

Hooks

Hook은 Component에서 데이터(state) 를 관리하고 데이터가 변경될 때 Effect(상호작용) 를 다룰 수 있다.

  • useState
  • useEffect
  • useCallback

이러한 것들이 모두 React의 hooks 이다.

기존의 Class 기반 Component는 State와 life-cycle을 관리하기 복잡했지만 Hooks는 이러한 것들을 간편하게 관리할 수 있게 도와준다.

단, Hooks는 React 함수 내부 에서만 사용이 가능하며 Hooks의 이름은 use로 시작한다.

React Hook은 이러한 특징들이 있는데, 그 중에서 나를 골치아프게 했던 useEffect에 대한 기록을 남기려고 한다.

Effect Hook

  • Effect Hook을 사용하면 함수 컴포넌트에서 Side effect를 수행할 수 잇다.
  • Component가 최초 Rendering(Mount)될 때, 지정한 State나 Prop의 변경에 따른 Effect callback 함수가 호출된다.
  • 첫 번째 파라미터 EffectCallback은 두 번째 파라미터 Deps에 지정된 변수가 변경될 때 실행되는 함수이다.
  • 두 번째 Deps Parameter에는 변경을 감지한 변수들의 Array가 인자로 들어간다.

첫 번째 렌더링은 life-cycle 중에서 componentDidmount 처럼 실행한다.

const App = () => {
  useEffect(() => {
    console.log("useEffect")
  }, [])
}

위의 코드는 App이 렌더링 될 때 console에 useEffect라는 문자를 출력한다.

const App = () => {
  const [count, setCount] = useState(0)

  useEffect(() => {
    console.log(`Count up! ${count}`)
  }, [count])

  return (
      <div>
        <button onClick={() => setCount(count + 1)}>Click</button>
    </div>
  )
}

위의 코드는 count라는 state가 변경될 때마다 Count up! 이라는 문장을 console에 출력한다.

const App = () => {
  useEffect(() => {
    const intervalId = setInterval(() => {
      console.log("useEffect")
    }, 1000)

    return () => {
          clearInterval(intervalId)
    }
  }, [])
}

위의 코드는 useEffect 함수 내에서 다른 함수를 return하는 형태를 가지고 있다. 이러한 경우 Component가 다시 rendering 되기 전과 컴포넌트가 Destroy 될 때 호출할 함수를 지정하게 된다. 이를 cleanup 함수라고 부른다. 이러한 cleanup 함수는 useEffect에 대한 마무리 정리를 해준다고 생각하면 된다. 이전의 class 기반 Component에서는 componentWillUnmount 처럼 실행한다.

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

Code splitting  (0) 2022.10.30
useCallback  (0) 2022.09.13
Key  (0) 2022.09.07
Custom Hook  (0) 2022.08.24
State  (0) 2022.08.15