React를 시작하는 가장 간단한 방법은 Create-React-App (CRA)를 사용하는 것이다.
하지만, CRA는 무겁기 때문에 정말 정말 간단한 리액트를 사용할 경우 CDN을 이용하는 것도 방법이다.
<script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>

const div = document.createElement('div');
div.innerText = 'Hello World'
div.className = 'container';
div.setAttribute('id', 'div1');
console.log(div); // <div class="container" id="div1">Hello World</div>React에서 제공하는 createElement는 JSX 대신 컴포넌트 생성이 가능한 메소드이다.
React.createElement(tagName, ?attributes, ?child) 형식으로 쓸 수 있다.
여기서 중요한 것은 tagName 대신에 react component를 집어넣을 수 있다는 것이다!!
(JSX처럼 그냥 컴포넌트 이름만 쓰는 것이 아닌 React.createElement안에 써줘야한다. <> 로 감싸는 것도 안된다. )
그리고 여러개의 태그를 추가하고 싶은 경우 (형제) 배열을 써도 되고, , 로 구분만 해줘도 된다.
const Child = () => {
return React.createElement(
"p",
{},
"child element!"
);
};
const Parent = () => {
return React.createElement("ul", {}, [
React.createElement("li", {}, "list item 1"),
React.createElement("li", {}, "list item 2"),
React.createElement(Child), // <Child /> (x)
]);
};
const App = () => {
return React.createElement("div", {}, [
React.createElement("h1", {}, "Hello World!"),
React.createElement(Parent),
]);
};
// 결과물
<div>
<h1>Hello World!</h1>
<ul>
<li>list item 1</li>
<li>list item 2</li>
<p>child element!</p>
</ul>
</div>
React18으로 넘어오면서 concurrency mode를 내부에 넣음으로써 이전 버전들과 index.js에 코드 변화가 생겼다.
ReactDOM.render(root component, 넣을 위치) 형식으로 작성해야 한다.
<body>
<div id="root"></div>
//cdn
<script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
<script>
const App = () => React.createElement("h1", {}, "Hello World");
ReactDOM.render(React.createElement(App), document.getElementById("root"));
</script>
</body>
ReactDOM.render 대신 ReactDOM.createRoot(rootNode).render 을 사용해야 한다.
<body>
<div id="root"></div>
//cdn
<script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
<script>
const App = () => React.createElement("h1", {}, "Hello World");
ReactDOM.createRoot(document.getElementById("root").render(React.createElement(App));
</script>
</body>
// index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Adopt Me</title>
<link href="./styles.css" rel="stylesheet" />
</head>
<body>
<div id="root">not rendered</div>
<script
crossorigin
src="https://unpkg.com/react@18/umd/react.development.js"
></script>
<script
crossorigin
src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"
></script>
<script>
const Child = () => {
return React.createElement("p", {}, "child element!");
};
const Parent = () => {
return React.createElement("ul", {}, [
React.createElement("li", {key: 'item1'}, "list item 1"),
React.createElement("li", {key: 'item2'}, "list item 2"),
React.createElement(Child, {key: 'item3'}),
]);
};
const App = () => {
return React.createElement("div", {}, [
React.createElement("h1", {key: 'child1'}, "Hello World!"),
React.createElement(Parent, {key: 'child2'}),
]);
};
const rootNode = document.getElementById("root");
ReactDOM.createRoot(rootNode).render(React.createElement(App));
</script>
</body>
</html>