Frontend/React

[React] 컴포넌트가 두 번씩 호출될 때 - React StrictMode

Rayi 2025. 1. 30. 10:05

React에서 제공하는 StrictMode는 애플리케이션에서 발생할 수 있는 문제를 자체적으로 검사하는 기능입니다.

 

StrictMode를 활성화 하면, React는 의도적으로 컴포넌트를 두 번씩 렌더링하여 발생할 수 있는 side effect를 확인합니다.

 

 

React는 렌더링과 커밋 두 단계로 동작합니다.

 

  • 렌더링 단계에서는 DOM과 같은 특정 환경에 어떤 변화가 일어나야 하는 지 결정합니다. 이 때 React는 이전 렌더와 현재 렌더의 결과값을 비교합니다.
  • 커밋 단계는 위의 변경 사항을 실제로 반영하는 단계입니다.

 

일반적으로 커밋단계는 렌더링 단계보다 훨씬 빠릅니다. 때문에 렌더링 단계가 병목이 되어 브라우저가 멈출 수 있는데, 이를 위해 렌더링 단계를 작은 단위로 나누어 각 단계를 중지했다가 재개하는 방식을 사용합니다.

 

이 때문에 React는 커밋 단계가 진행되기 이전에 렌더링 단계에서 같은 생명주기 메서드들을 여러번 호출할 수도 있습니다.

  • constructor( )
  • componentWillMount ( )  (or UNSAFE_componentWillMount ( ) )
  • componentWillReceiveProps ( )  (or UNSAFE_componentWillReceiveProps ( ) )
  • componentWillUpdate ( )  (or UNSAFE_componentWillUpdate ( ) )
  • getDerivedStateFromProps ( )
  • shouldComponentUpdate ( )
  • render ( )
  • setState ( )  업데이트 함수 (첫 번째 인자)

 

이로 인해 발생할 수 있는 문제를 더 쉽게 찾게 하기 위해 StrictMode는 아래 함수들을 의도적으로 두 번 호출하게 됩니다.

  • constructure( ), render( ), shouldComponenetUpdate( )
  • getDerivedStateFromProps( )
  • 함수의 컴포넌트 바디
  • setState의 첫 번째 인자
  • useState, useMemo, useReducer로 호출하는 함수

 

※ StrictMode는 개발 모드에서만 활성화되기 때문에, 실제 빌드한 파일에는 영향을 주지 않습니다!

 

더 자세한 정보는 아래 공식 문서에서 확인할 수 있습니다.

https://ko.legacy.reactjs.org/docs/strict-mode.html

 

Strict 모드 – React

A JavaScript library for building user interfaces

ko.legacy.reactjs.org

 

728x90