리액트는 UI 자바스크립트 라이브러리로써 싱글 페이지 애플리케이션의 UI(User Interface)를 생성하는데 집중한 라이브러리이다.
웹 페이지가 렌더링 되는 과정
HTML parser가 HTML을 바탕으로 DOM tree를 그린다.
CSS parser가 CSS를 바탕으로 CSSOM을 그린다.
DOM에 CSSOM을 적용하여 Render Tree를 그린다.
CSSOM은 DOM에 CSS가 적용된 객체 모델
Render Tree를 바탕으로 Painting 하여 실제 화면에 렌더링 한다.
<script></script>
태그를 만나면 파싱을 잠시 중단하고 js 파일을 로드한다.DOM이란?
동적으로 웹 페이지를 변경하다 보면 element의 생성, 수정, 제거 등 DOM을 변화시키는 수많은 연산이 생기게 된다. 웹 브라우저는 DOM을 활용하여 객체에 JS와 CSS를 적용하게 되는데, CSS 연산을 다시 하고 페이지를 리 페인트 하는 과정은 시간과 비용을 많이 소모하게 된다.
하지만, 그렇다고 DOM을 사용하지 않을 수도 없다. 결과적으로 웹 브라우저는 최종적으로 DOM을 보고 웹 페이지를 그리기 때문이다.
Virtual DOM - 가상 돔
React는 Virtual DOM을 활용해 실제 DOM에 접근하여 조작하는 대신, 이를 추상화한 자바스크립트 객체를 구성하여 사용한다. 즉 동적으로 데이터가 변화했을 때 직접적으로 DOM을 조작하는 것이 아니라 DOM의 사본이라고 할 수 있는 새로운 Virtual DOM을 생성한다.
가상의 돔 트리를 사용해서 이전의 상태와 이후의 상태를 비교하여 변경된 부분의 DOM 만을 변경한다.
→ 조화 과정(reconciliation)
참고
React에서 리렌더링이 일어나는 경우
Props가 변경되었을 때
State가 변경되었을 때
forceUpdate() 를 실행하였을 때.
부모 컴포넌트가 렌더링되었을 때
Component 단위로 개발을 해야한다.
컴포넌트는 독립적인 단위의 소프트웨어 모듈을 말한다. 즉 소프트웨어를 독립적인 하나의 부품으로 만드는 방법이다. 리액트는 웹에서 쓰는 각 요소들을 컴포넌트로 만들 수 있게 해 기존의 UI를 다른 화면에서 다시 쓰거나, 다른 프로젝트에서 다시 쓸 수 있도록 하는 장점(높은 재사용성)을 가진다.