
const element = <h1>Hello, JSX!</h1>;const name = "React";
const element = <h1>Hello, {name}!</h1>;<div className="container">Hello</div><img src="image.png" /> // 올바른 문법JSX는 내부적으로 XML/HTML 코드를 자바스크립트로 변환const element = <h1 className="title">Hello, JSX!</h1>;
ReactDOM.createRoot(document.getElementById("root")).render(element);
const element = React.createElement("h1", { className: "title" }, "Hello, JSX!");
ReactDOM.createRoot(document.getElementById("root")).render(element);
React.createElement()는 JSX를 사용하지 않고 리액트 요소(React Element)를 생성하는 함수
// 문법 형식
React.createElement(type, props, ...children)
| 매개변수 | 역할 |
|---|---|
| type | 생성할 요소의 태그 이름 또는 컴포넌트 (예: "div", "h1", MyComponent) |
| props | 요소의 속성(Attributes) 또는 className, id, onClick 등의 이벤트 핸들러 포함 |
| ...children | 해당 요소의 자식 요소(여러 개 가능), (텍스트, 다른 React 요소 등) |
const name = "React";
const element = <h1>Hello, {name}!</h1>;
ReactDOM.createRoot(document.getElementById("root")).render(element);
function getGreeting(name) {
return `Hello, ${name}!`;
}
const element = <h1>{getGreeting("React")}</h1>;
ReactDOM.createRoot(document.getElementById("root")).render(element);
const element = (
<div>
<h1>Hello!</h1>
<p>Welcome to React.</p>
</div>
);
이렇게 React에서 JSX의 형식을 사용하는 법을 알아보았습니다.
리액트 엘리먼트(React Element)는 DOM 엘리먼트의 가상 표현입니다.
리액트에서 UI를 기술하는 불변 객체(Immutable Object)로, 화면에 보이는 요소를 나타낸다.
하지만 자체적으로 브라우저 화면에 렌더링되지 않으며, 단순한 설명(Description) 역할을 합니다.
리액트 엘리먼트는 화면에 보이는 것들을 기술합니다.
JSX 또는 React.createElement()를 사용하여 생성할 수 있습니다.
예시 JSX 코드 :
const element = <h1>Hello, React!</h1>;
// React.createElement("h1", null, "Hello, React!")와 동일한 역할
하지만 이 엘리먼트 자체가 DOM에 추가되는 것은 아닙니다.
React는 위 엘리먼트를 토대로 실제 DOM 엘리먼트를 생성합니다.(아직 실행 안함)
ReactDOM.createRoot().render()를 사용하면 리액트 엘리먼트가 가상 DOM(Virtual DOM)에 저장,
React는 이를 실제 DOM 엘리먼트로 변환하여 웹 브라우저에 렌더링합니다.
const element = <h1>Hello, React!</h1>;
ReactDOM.createRoot(document.getElementById("root")).render(element);
결론 : 엘리먼트를 Virtual DOM에 저장해둔 다음 ReactDOM.createRoot().render()를 사용하면 그것의 변화에 따라 렌더링.
추가 설명은 아래 참조.
렌더링(Rendering)은 리액트 컴포넌트가 UI를 생성하고 업데이트하는 과정을 의미합니다.
리액트의 렌더링 과정은 다음과 같이 이루어집니다.
// React Element
// Button 컴포넌트 정의
function Button({ color, children }) {
return <button style={{ color }}>{children}</button>;
}
{
type: 'div',
props: {
children: [
{
type: 'p',
props: {
children: '나중에 확인하셨으면 열 버튼을 눌러주세요.'
},
},
{
type: Button, // 사용자 정의 컴포넌트
props: {
color: 'green',
children: '확인'
},
},
]
},
}
// 렌더링
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(element);
// DOM Element
<div>
<p>나중에 확인하셨으면 열 버튼을 눌러주세요.</p>
<Button color="green">확인</Button>
</div>
위 React Element에서 렌더링을 하게 된다면 아래 DOM Element처럼 렌더링 된다.
위 코드에서 type: Button부분이 button이라면 컴포넌트 정의 필요없다.
결론 : HTML자체가 가지고있는 태그를 type에 사용시에는 컴포넌트 정의 필요없다.
그럼 문제가 하나 생깁니다.
그렇다면 화면에 변경된 엘리먼트를 보여주려면 어떻게 해야 할까? 라는 문제입니다.
답은 새로운 엘리먼트를 생성한 후 기존 엘리먼트와 바꿔치기하는 것입니다.

root라는 id를 가진 div 태그에 모든 리액트 엘리먼트들이 렌더링되며, 리액트 DOM에 의해 관리됨.