리액트에서 개발할 모든 애플리케이션은 컴포넌트라는 조각으로 구성
컴포넌트는 UI 구축 작업을 훨씬 쉽게 만들어줌
UI 요소를 표현하는 최소한의 단위이며 화면의 특정 부분이 어떻게 생길지 정하는 선언체
컴포넌트를 생성하고 보여지고자 하는 UI 요소를 컴포넌트 내부에서 JSX를 통해 선언하면 이를 리액트가 화면에 그려줌. 리액트 컴포넌트가 선언체라는 개념은 아주 중요
리액트의 컴포넌트기반 개발 이전에는 브라우저에서 동적으로 변하는 UI를 표현하기 위해 직접 DOM 객체를 조작하는 명령형 프로그래밍 방식으로 구현
명령형으로 작성된 코드의 경우 Hello, World!를 출력하기 위해 컴퓨터가 수행하는 절차를 일일히 코드로 작성해주어야 한다.
// Hello, World! 화면에 출력하기
// 순수 javaScript 명령형 코드
const root = document.getElementById('root');
const header = document.createElement('h1');
const headerContent = document.createTextNode(
'Hello, World!'
);
header.appendChild(headerContent);
root.appendChild(header);
UI을 선언하고 render 함수를 호출하면 React가 알아서 절차를 수행해 화면에 출력
💡 즉, 화면에 어떻게 그려야할지는 React 내부에 잘 숨겨져 추상화
// React 코드 (선언적인)
const header = <h1>Hello World</h1>; // jsx
ReactDOM.render(header, document.getElementById('root'));
컴포넌트가 현재
props와state의 상태에 기초하여 UI를 어떻게 구성할지 컴포넌트에게 요청하는 작업

렌더링이 발생하는 경우
리액트 앱이 실행되고 첫 렌더링이 일어나면 리액트는 컴포넌트의 루트에서 시작하여 아래쪽으로 쭉 훑으며 컴포넌트가 반환하는 JSX 결과물을 DOM 요소에 반영.
첫 렌더링을 끝난 이후에 추가로 렌더링을 트리거 하려면 상태를 변경
컴포넌트 상태에 변화가 생기면 리랜더링이 발생합니다.
여러 상태가 변경됐다면 리액트는 이를 큐 자료구조에 넣어 순서를 관리
브라우저의 랜더링과 리액트의 랜더링은 엄연히 다른 독립적인 프로세스
브라우저 랜더링(페인팅)
렌더링이 완료되고 React가 DOM을 업데이트한 후 브라우저는 화면을 그림