본문 바로가기
개인공부/React

React 공부 - Hooks의 LifeCycle ( useEffect)

by 왕큰새 2021. 3. 5.
728x90

React Hooks Component에는 LifeCycle이 존재하지는 않지만, 흉내 낼수 있다.

 

그것이 useEffect이다.

 

 useEffect(()=>{ // componentDidMount, componentDidUpdate 역할 (1대1 대응은 아님)
    interval.current = setInterval(changeHand,100); // 반복할 함수 interval은 Ref 
    return () => { clearInterval(interval.current)} // componentWillUnmount 역할
  }, [변경될 state]); // 두번째 인수가 클로저 문제 해결해주는 역할

만약, 변경될 state에 아무것도 넣지 않는다면 처음 실행되고 다시 실행되지 않는다.

 

두번째 인자에 아무것도 안넣으면, componentDidMount 

두번째 인자에 변경될 state를 넣으면, componentDidUpdate

 

return() => {} 구문은 componentWillUnmount 

useEffect(()=>{ // componentDidMount, componentDidUpdate 역할 (1대1 대응은 아님)
    console.log('다시 실행');
    interval.current = setInterval(changeHand,100);
    return () => { 
        console.log('종료');
        clearInterval(interval.current)} // componentWillUnmount 역할
  }, [변경될 state]); // 두번째 인수가 클로저 문제 해결해주는 역할

이런식으로 useEffect를 구성하고 결과를 확인해보면, 

 

계속 다시실행, 종료가 console에 출력되는 것을 볼 수 있는데, 

 

이것은 hooks component는 render 될때 마다 hooks component 전체를 재실행하기 때문에 발생하는 현상이다.

 

 

class Component LifeCycle VS hooks Component UseEffect

 

class Component의 경우 state 에 따라 다른 LifeCycle을 가지게 하고싶을 경우

ComponentDidMount , ComponentDidUpdate 에서 조건문으로 처리한다.

 

hooks Component의 경우에는 , UseEffect를 여러개를 작성하고 , 두번째 인자(배열)만 변경해주면 된다.

 

※ useLayoutEffect 는 레이아웃 변경점(창을 늘렸다 줄였다)하는 것을 감지하기 위해 사용한다.

 

'개인공부 > React' 카테고리의 다른 글

React 공부 - 6일차  (0) 2021.03.01
React 공부 - 5일차  (1) 2021.02.28
React 공부 - 4일차 (성능 개선)  (0) 2021.02.28
리액트 공부 3일차 - 2  (0) 2021.02.23
리액트 공부 - 3일차  (0) 2021.02.23