createElement를 사용하면 React 엘리먼트를 생성할 수 있다.
즉, 리액트 컴포넌트는 React.createElement를 통해 element에 대한 정보를 가지는 Object를 생성하고 이를 In-Memory에 저장하고 ReactDOM.render 함수를 통해 Web API(document.createElement)를 이용해서 실제 웹 브라우저에 그려주는 방식으로 동작한다.
JSX -> React element -> fiber(VDOM에 올라가기 위해 필요한 정보를 포함하는 노드같은 존재)
babel을 통해 JSX -> React element
createElement(type, config, child1, child2, .... childN)
config에는 props가 있고 props는 ref, key etc...
children : 중심 component의 자식 component들
React element에는 key와 ref라는 예약된 props가 있다.
이를 제외한 나머지를 props객체에 저장한다.
여러 자식이 오면 배열에 저장한다.
default props가 존재하면 props객체에 적용된다.
이런 과정을 거쳐 React element객체가 생성된다.
JSX를 사용하지 않고 순수하게 react element만 사용할 경우의 code는 다음과 같다.
import { createElement } from 'react';
function Greeting({ name }) {
return createElement(
'h1',
{ className: 'greeting' },
'Hello ',
createElement('i', null, name),
'. Welcome!'
);
}
export default function App() {
return createElement(
Greeting,
{ name: 'DOWON' }
);
}
결과는 Hello Taylor. Welcome! 다음과 같다.
그럼 여기에서 궁금한 점은 JSX처럼 사용할 경우 Code는 어떻게 변경되는가?
function Greeting({ name }) {
return (
<h1 className="greeting">
Hello <i>{name}</i>. Welcome!
</h1>
);
}
export default function App() {
return <Greeting name="DOWON" />;
}
이렇게 된다. Code가 짧아지고 보기가 더 편해진다. 그래서 우리는 평소 개발할때 JSX를 사용하여 진행하게 된다.