<!DOCTYPE html>
<html lang="ko">
<head> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>My App</title>
</head>
<body>
<div id="root"></div> // 루트요소라고 부른다
</body>
</html>
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);
이전 버전(18이전 버전)은 동시성을 제공하지 않는다.(아래코드는 이전 버전)
import ReactDOM from 'react-dom';
ReactDOM.render(<App/>, document.getElementById('root'));
리액트는 가상DOM을 쓴다는것은 많이 알려져있다. 실제Dom까지 반영되는 과정은 아래와 같다.
크게 2가지 과정으로 나눠진다. 상태 변경 → 렌더링(컴포넌트 실행) → Reconciliation(Diff) → Commit(DOM 반영)
이때 commit 직후 Paint이전에 호출되는 훅은 useLayoutEffect이며 Paint이후에 호출되는 훅은 useEffect이다.
cf)Paint란? 브라우저가 픽셀을 화면에 그리는 단계이다.(리액트가 관여하는 단계는 아니고 브라우저가 관여하는 단게이다)