
📝 참고자료
A Guide to using useEffect Hook for React Lifecycle Methods
A Simple Explanation of React.useEffect()
React lifecycle introduction
모든 컴포넌트에는 각각의 컴포넌트의 생명 주기가 존재한다
useEffect 훅이 도입되었다.
🕘 먼저 useEffect hook과 클래스 생명주기 메서드는 밀접한 연관이 있기때문에 사용하지 않더라도 간단히 서술하도록 하겠음
1단계 : componentDidMount로 화면에 최초 렌더링하기
componentDidMount인데constructor()
staticgetDerivedStateFromProps()
render()
componentDidMount()
componentDidMount
- 외부 데이터를 불러와 컴포넌트의 상태를 업데이트
- 타이머를 설정하고 주기적으로 작업을 수행
- 이벤트 리스너를 등록하고 사용자 입력 또는 이벤트에 대응
- 외부 API 호출과 같은 비동기 작업을 수행
2단계 : componentDidUpdate로 업데이트하기
componentDidUpdate인데,static getDerivedStateFromProps()
shouldComponentUpdate()
render()
getSnapshotBeforeUpdate()
componentDidUpdate()
3단계 : componentWillUnmount로 마운트 해제하기
componentWillUnmount()
사이드이펙트
useEffect는 생명주기와 더불어 가장 큰 핵심은 useEffect내에서 부수효과들을 처리할 수 있다는 점이다
useEffect의 첫번째 인수인 콜백함수 내부이다.사이드이펙트 예시
fetch 요청, DOM에 직접 접근해서 조작, setTimeout()과 같은 타이머 함수 사용useEffect()는 2개의 필수인수와 1개의 옵션인수를 받는다
useEffect(callback[, dependencies]);
useEffect를 사용할 때 cleanup을 정의하는 return 값이 있을 경우, 이를 사용하여 효과 함수의 정리(clean-up)를 수행할 수 있다 
개요
useEffect라고 했는데, 해당 시점들을 이미지로 확인해보자.
useEffect의 생명 주기
컴포넌트 마운트(mount)
useEffect 내부 코드로직이 실행된다componentDidMount와 비슷한 역할을 하게 된다컴포넌트 업데이트(updating)
useEffect에 전달된 콜백함수 또한 다시 실행된다componentDidUpdate와 비슷한 역할을 하게 된다컴포넌트 마운트 해제(unmount)
useEffect에 전달된 함수의 반환값인 clean-up 함수가 호출componentWillUnmount와 비슷한 역할을 하게 된다
useEffect의 생명 주기 (2)
최초 렌더링(mount)시에만 로직을 실행하려면?
useEffect 훅의 두 번째 인수로 빈 배열을 사용useEffect(() => {
// 최초 1회 실행할 함수 로직
}, [])
상태 업데이트(updating) 시 로직을 실행하려면?
useEffect(() => {
// state나 prop 변경시에만 useEffect 내 콜백 함수 실행
}, [state,prop])
컴포넌트 마운트 해제(unmount) 로직을 실행하려면?
useEffect의 클린업함수를 실행해야한다
useEffect(() => {
return () => {
// 클린업함수 실행 부분
}
}, [])