Rendering Element : 렌더링 요소 는 리액트 앱의 설계에 있어 최소단위의 요소이다.
개발자가 화면상에 보여주고자 하는
하나의 Element는 이런 모습이다.const element = <h1>Hello,world</h1>;.
브라우저의 DOM Elements와는 다르게,React Elements는 '단순한 객체'이며 생성 또한 간단하다.
.
React DOM은 리액트 요소들과 매치되기 위해 DOM을 업데이트를 처리한다.
위에서 설명한 요소 : Elements 는 컴포넌트 : Components와 명백히 다르다.
Elements는 Components의 구성요소 이다.
리액트 앱의 어딘가에 아래와 같은 코드가 담긴 HTML파일이 존재한다.
<div id="root"></div>우리는 이것을
root DOM노드라고 부른다.
이 내부에 들어가는 모든것들이React DOM에 의해 처리되기 때문이다.
리액트로만 만들어진 앱들은 보통 단 하나의 root DOM node를 가지고 있다.
하지만 만약 기존의 앱에 리액트를 접목하고자 할 땐, 필요한 많은 독립된 root DOM node를 가질 수도 있다.
우리의 리액트 Elements가 위에서 설명한 Root DOM으로 전달되어 rendering되기 위해선,
React.DOM.render( ) 을 통해 루트 돔 내부에 전달되는 과정이 필요하다.
아래의 코드는
element를root라는 react root dom에 전달하기 위해ReactDOM.render( )를 사용한 모습이다.const element = <h1>Hello, seongwoo</h1>; ReactDOM.render(element, document.getElementById('root'));
ReactDOM.render( 요소 , document.getElementById( 'root ID' ) );
리액트 요소 들은 불변한다. 즉, 일단 요소를 생성하고 나면, 우린 이것들의 자식이나 속성들을 바꿀 수 없다.
하나의 요소는 영화의 프레임 한장면과 같다.
다시 말해,
하나의 리액트 Element는 정확히시간의 한 지점에서만의 UI를 표현할 수 있다.function tick() { const element = ( <div> <h1>Hello, world!</h1> <h2>It is {new Date().toLocaleTimeString()}.</h2> </div> ); ReactDOM.render(element, document.getElementById('root')); } setInterval(tick, 1000);위의 시계침 예제의 코드는,
setInterval()함수 내에서tick()내에 있는ReactDOM.render()를
'매 초 (every second)' 마다 callback 한다
.
( call back? : https://velog.io/@he1256/JS%EC%9D%98-%EC%BD%9C%EB%B0%B1%ED%95%A8%EC%88%98Call-back-Simple-Note-javascript )
하지만 실전에서 우리는 위의 리액트의 본질적인 특징을 그대로 사용하지 않고, ReacDOM.render()를 단 한번만 호출하도록 만들어 사용하게 된다.
코드를stateful components : 상태 저장 컴포넌트 에 캡슐화 시켜, 단 한번의 render 호출만으로 위의 기능을 동작하도록 하는 것이다.
이 내용은 다음 섹션인 stateful components 에서 다룰 것 이다.
React DOM은 새로운 요소와 그 자식을 이전 요소와 비교하고 DOM을 원하는 상태로 가져오는 데 필요한 DOM 업데이트만 적용한다.

실제로 우리는 앞에서 매 초 마다 그리게 될 UI tree 전체를 묘사한 element를 만들었지만, 실제로는 ReactDOM.render()에 의해 업데이트되는 Text Node 컨텐츠만이 변화하는 것을 볼 수 있다.