리액트의 렌더링에는 render phase
와 commit phase
가 있다
함수를 실행한 후에 가상 DOM과 현재의 DOM을 비교해서 어떤 UI가 변경되어야 할지 결정하는 단계
단순히 결정하는 단계이기 때문에 성능에 영향을 주지 않는다
DOM을 비교했을 때, 변화가 있는 것을 검사하는 것을
dirty checking
이라고 한다
실제 변화된 UI를 실제 DOM에 반영하는 단계
실제로 반영하기 때문에 useEffect 등의 사이드 이펙트가 발생하는 훅이 실행된다
render phase
가 완료되면 리액트는 즉시 commit phase
를 실행하는 것이 아니라, 다른 높은 우선 순위의 작업을 먼저 처리할 수 있다
이렇게 동기화가 필요한 작업을 단계적으로 진행하여 효율적으로 사용자 경험을 개선한다
그리고 render phase
에서 변경된 것이 Fiber Tree
에 준비된 후에 commit phase
로 넘어가기 때문에 각 단계간의 일관성이 유지된다
이렇게 순차적으로 동작해서 UI가 정확하게 동기화되고 불필요한 재렌더링을 방지한다