React Life Cycle - 함수 컴포넌트의 생명 주기

크롱·2025년 2월 4일
0

2025 면접

목록 보기
2/2

React 컴포넌트에는 생명 주기(life Cycle)가 존재한다. 생명 주기는 생성(mounting) - 업데이트(updating) - 제거(unmounting) 단계로 구성되어있다.
이러한 생명주기에는 각 단계마다 사용되는 함수(ex.componentDidMount)가 있는데, 이는 클래스형 컴포넌트에서만 사용할 수 있으며, 함수형 컴포넌트에서는 사용할 수 없다.
함수형 컴포넌트에서는 useEffect 훅을 활용하여 컴포넌트의 생명주기와 관련된 작업을 처리할 수 있다.

리액트 렌더링이란?
브라우저가 렌더링에 필요한 DOM 트리를 만드는 과정. 이를 공식문서에서는 컴포넌트 호출이라고함.

1. 마운트 (최초 렌더링)

처음 DOM이 생성된 후 웹 브라우저상에 컴포넌트가 그려짐

  1. 컴포넌트 내부 함수 실행
  • useState,const,var 등 value 초기화
  • 컴포넌트 내부 로직 실행
  • JSX 반환

  1. Virtual DOM 업데이트
  • 반환된 JSX를 기반으로 Virtual DOM 생성/업데이트

  1. 브라우저 DOM 업데이트
  • Virtual DOM의 변경사항들이 실제 브라우저 DOM에 반영됨

  1. 브라우저 렌더링 ~ Painting
  • 화면이 그려짐

  1. useEffect 실행
  • 화면이 완전히 그려진 후 실행
  • 보통 이때 서버에 API 요청을 통해 데이터 불러옴

예시

React 의 StrictMode 를 해제한 코드이다 (두번 출력되는 것을 방지)

함수형 컴포넌트 내부 로직 -> return -> useEffect


2. 업데이트 (리렌더링)

state, 컴포넌트에 전달된 props 변경 및 부모 컴포넌트 리렌더링 등 변화가 생기면 실행되고 호출 과정은 아래와 같다.

함수형 컴포넌트 내부 로직 -> return -> useEffect(옵션)

여기서 함수형 컴포넌트 내부 로직들은 별도 처리가 없는 경우 udpate(리렌더링) 시 매번 실행이 됨 (useCallback과 useMemo 훅을 사용하여 함수와 값을 메모이제이션함으로써 불필요한 재계산과 재생성을 방지할 수 있다.)
useEffect 같은 경우 2번재 파라미터[]의 의존성에 따라서 실행될 수도 있고, 안될 수도 있다.

더하기를 눌러서 num의state 가 바뀌면 다시 App 컴포넌트가 렌더링되면서, App 컴포넌트 자체를 다시 실행 시키고 return 문까지 실행한 다음 useEffect를 실행시킨다. useEffect를 실행시킬 때 클린업 함수가 존재한다면 클린업 함수가 실행되고 그 다음에 useEffect의 콜백함수가 실행된다.

useEffect의 return문 안의 코드(클린업함수)는 의존성 배열이 바뀌거나, 컴포넌트가 언마운트 될때의 두 경우 모두 실행된다

3. 언마운트(컴포넌트 제거)

언마운트 단계는 컴포넌트가 제거되기 전에 발생한다. 이 단계에서는 컴포넌트 내부의 정리 작업이나 리소스 해제 등을 수행한다. 언마운트는 다른 페이지로 이동하는 등 컴포넌트가 더 이상 필요하지 않을 때 발생하며, 화면에서 사라지거나 더 이상 사용되지 않을 때의 작업을 처리하는 단계
클린업 함수가 실행됨







참고 & 출처 : https://happy-jjang-a.tistory.com/254

https://velog.io/@dpldpl/%ED%95%A8%EC%88%98%ED%98%95-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8%EC%97%90%EC%84%9C%EC%9D%98-%EB%9D%BC%EC%9D%B4%ED%94%84-%EC%82%AC%EC%9D%B4%ED%81%B4%EC%83%9D%EB%AA%85%EC%A3%BC%EA%B8%B0-useEffect-%ED%9B%85-%EB%A7%88%EC%9A%B4%ED%8A%B8%EC%99%80-%EB%A0%8C%EB%8D%94%EB%A7%81%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-React-typescript

https://www.youtube.com/watch?v=wLPHtaSfCmU&t=212s

https://www.youtube.com/watch?v=kKVVan3EGoU

https://yceffort.kr/2020/10/IIFE-on-use-state-of-react

profile
👩‍💻안녕하세요🌞

0개의 댓글