[React] DOM과 Virtual DOM

gimmari·2024년 8월 11일
0

📝 React

목록 보기
3/24

01. Rendering

리액트에서 렌더링이란, 컴포넌트가 현재 props와 state의 상태에 기초하여 UI를 어떻게 구성할지 컴포넌트에게 요청하는 작업을 의미.

✔︎ 렌더링

✔︎ 리렌더링


02-1. Dom

DOM 요소의 예:

<div>, <span>, <input>, <button>
등 HTML 태그로 정의된 요소들은 DOM 요소입니다.

✔︎ DOM(명령형 프로그래밍)

//js는 명령형 프로그래밍
const root = document.getElementById('root'); 
const header = document.createElement('h1'); 
const headerContent = document.createTextNode(
	'Hello, World!'
);

header.appendChild(headerContent); 
root.appendChild(header);

✔︎ 리액트(선언형 프로그래밍)

 // React 코드 (선언적인)
const header = <h1>Hello World</h1>; // jsx
ReactDOM.render(header, document.getElementById('root'));


트리의 요소 하나하나를 ‘노드’라고 하고 각각의 ‘노드’는 해당 노드에 접근과 제어(DOM 조작)를 할 수 있는 API를 제공함

🔽 DOM 사용 예시

// id가 demo인 녀석을 찾아, 'Hello World!'를 대입해줘.
document.getElementById("demo").innerHTML = "Hello World!";

// p 태그들을 모두 가져와서 element 변수에 저장해줘
const element = document.getElementsByTagName("p");

// 클래스 이름이 intro인 모든 요소를 가져와서 x 변수에 저장해줘
const x = document.getElementsByClassName("intro");

02-2. Virtual Dom

실제 DOM과 구조가 완벽히 동일한 복사본 형태로 제 DOM을 조작하는 것 보다 훨씬 더 빠르게 조작을 수행할 수 있다.

[STEP 1]

  1. 화면이 갱신되기 구조가 담겨있는 가상DOM 객체
  2. 화면 갱신 보여야 할 가상 DOM 객체

리액트는 state가 변경돼야만 리렌더링이 되죠. 그 때, 바로 2번에 해당되는 가상 DOM을 만드는거죠.

[STEP 2 : diffing]

state가 변경되면 2번에서 생성된 가상돔과 1번에서 이미 갖고있었던 가상돔을 비교해서 어느 부분(엘리먼트)에서 변화가 일어났는지를 상당히 빠르게 파악해내요.

[STEP 3 : 재조정(reconciliation)]

파악이 다 끝나면, 변경이 일어난 그 부분만 실제 DOM에 적용시켜줘요. 적용시킬 때는, 한건 한건 적용시키는 것이 아니라, 변경사항을 모두 모아 한 번만 적용을 시켜요(Batch Update 🔥)

profile
김마리의 개발.로그

0개의 댓글