DOM을 조작할 때마다 브라우저 UI를 새롭게 그려주는 작업은 꽤 복잡하고 시간이 걸리는 작업이다. Virtual DOM은 이러한 비효율적 동작을 빠르게 만들어준다.
리액트는 두 개의 가상 돔 객체를 갖고 있다. 첫 번째는 렌더링 이전 화면 구조를 나타내는 가상돔이고 두 번째는 렌더링 이후에 보이게될 화면 구조를 나타내는 객체이다.
리액트는 state가 변경될 때마다 화면이 새로 렌더링 되는데, 렌더링이 발생될 상황에 놓일때마다 새로운 화면에 들어갈 내용이 담긴 가상돔을 생성한다. 렌더링 이전에 화면의 내용을 담고있는 첫 번째 가상돔과 업데이트 이후 내용을 담고 있는 가성돔을 비교해서 어느 엘리먼트가 변했는지 찾아낸다(Diffing이라고 한다.)
Diffing 이후에 Batch Update를 수행하는데 Batch Update란 변경된 모든 엘리먼트들을 집단으로 실제 DOM에 한 번에 적용시켜준다. 따라서 훨씬 빠르고 효율적이다.
이러한 과정들을 Reconsiliation(재조정)이라고 한다.