📝 참고자료
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 () => {
// 클린업함수 실행 부분
}
}, [])