🧸 브라우저에서의 렌더링 vs 리액트의 렌더링

📍 브라우저에서의 렌더링

📍 리액트의 렌더링: 브라우저가 렌더링에 필요한 DOM 트리를 만드는 과정

🧸 리액트의 렌더링이란?

리액트 애플리케이션 트리 안에 있는 모든 컴포넌트들이 현재 자신들이 가지고 있는 props와 state의 값을 기반으로 어떻게 UI를 구성하고 이를 바탕으로 어떤 DOM 결과를 브라우저에 제공할 것인지 계산하는 일련의 과정을 의미함

👀 컴포넌트가 props와 state와 같은 상태값을 가지고 있지 않다면, 해당 컴포넌트가 반환하는 JSX 값에 기반해 렌더링이 일어나게 됨

🧸 렌더링이 발생하는 시나리오

  1. 최초 렌더링
  2. 리렌더링: 최초 렌더링이 발생한 이후로 발생하는 모든 렌더링을 의미함

🤔 useState 등으로 관리되지 않는 단순한 변수는?

🧸 리액트의 렌더링 프로세스

  1. 렌더링 프로세스가 시작되면 리액트는 컴포넌트의 루트에서부터 차근차근 아래쪽으로 내려가면서 업데이트가 필요하다고 지정돼 있는 모든 컴포넌트를 찾음

  2. 클래스형 컴포넌트의 경우 클래스 내부의 render() 함수 실행 함수형 컴포넌트의 경우 FunctionComponent() 그 자체를 호출한 뒤에 그 결과물을 저장함

  3. 재조정 과정: 각 컴포넌트의 렌더링 결과물을 수집 -> 가상 DOM과 비교해 실제 DOM에 반영하기 위한 모든 변경 사항을 차례차례 수집함

  4. 재조정 과정이 모두 끝나면 모든 변경 사항을 하나의 동기 시퀀스로 DOM에 적용해 변경된 결과물이 보이게 됨