3-1. Rendering Element
- 이 안에 들어가는 모든 엘리먼트를 ReacDOM에서 관리하기 때문에 이것을 Root DOM node라고 부름
- 일반적으로 React로 구현 된 애플리케이션은 하나의 루트 돔 노드가 있음
- 단, 리액트를 기존 앱에 통합하려는 경우에는 원하는 만큼의 독립 된 루트 돔 노드를 가질 수 도 있음
- React Element를 루트 DOM 노드에 렌더링 하려면 ReactDOM.createRoot(루트 DOM 노드).render(렌더링 할 엘리먼트)
- ReactDOM.createRoot 의 반환값은 ReactDOMRoot 객체. 그 객체가 가지고 있는 render 메소드를 사용하기 위해 루트 생성
const element = (
<>
<h1> What time is it now? </h1>
<h3> It is { new Date().toLocaleTimeString() } </h3>
</>
);
ReactDOM.createRoot(document.getElementById('root')).render(element);
3-2. Rendered Element Update
- 리액트 엘리먼트는 불변 객체(immutable)
- 엘리먼트를 생성한 이후에는 해당 엘리먼트의 자식이나 속성을 변경할 수 없음
- 엘리먼트를 업데이트 하기 위해서는 완전히 새로운 엘리먼트를 만들고 다시 render 호출
<div id="root"></div>
<script type="text/babel">
const ReactClientDOM = ReactDOM.createRoot(document.getElementById('root'));
function tick(){
const element = (
<>
<h1>What time is it now?</h1>
<h3>It is { new Date().toLocaleTimeString() }</h3>
</>
);
ReactClientDOM.render(element);
}
tick();
setInterval(tick, 1000);
</script>
3-3. Conditional Rendering
- 조건부 렌더링
- 여러 개의 엘리먼트 중 특정 조건에 따라 한의 엘리먼트만 렌더링 할 수 있음
const number = 0;
const element = number && <h1>0이 아닙니다.</h1>
ReactDOM.createRoot(document.getElementById('root')).render(element);