์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ ์ํ์ ๋ํ ๋ทฐ๋ง ์ค๊ณํ๋ฉด ๋๋ค.
์
๋ฐ์ดํธ ํด์ผํ๋ ์ต์ํ์ ๋ถ๋ถ๋ง์ ์ฐพ์์ ์
๋ฐ์ดํธ๊ฐ ๊ฐ๋ฅํ๋ค.

###๋ฆฌ์กํธ์์๋ ๋ชจ๋ ํ์ด์ง๊ฐ ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑ๋์ด ์๊ณ , ํ๋์ ์ปดํฌ๋ํธ๋ ๋ ๋ค๋ฅธ ์ฌ๋ฌ ๊ฐ์ ์ปดํฌ๋ํธ ์กฐํฉ์ผ๋ก ๊ตฌ์ฑ๋ ์ ์๋ค.
๊ฐ๋ฐํ ๋ ํญ์ ๊ท๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํํ๋ก ๊ฐ๋ฐํ๋ ๊ฒ์ด ์ค์ํ๋ค.
๋ฆฌ์กํธ์์๋ ์ํ๊ด๋ฆฌ๋ฅผ ์ํ state๋ผ๋ ๊ฐ๋ ์ด ์กด์ฌํ๋ค. ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ ์ํ๋ฅผ ์๋ฏธํ๋ฉฐ ๋ฐ๋ผ์ state๋ฅผ ์ ๊ด๋ฆฌํ๋๊ฒ์ด ์ค์ํ๋ค.
Javascript์ XML/HTML์ ํฉ์น Javascript ํ์ฅ ๋ฌธ๋ฒ
const element =<h1>Hello, world!</h1>
JSX๊ฐ ๋ด๋ถ์ ์ผ๋ก XML/HTML ์ฝ๋๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ณํํ๋ ๊ณผ์ (๋ฒ๋ค๋ง)์ ํ ๊ฒ์ด๋ค.
-> ์ต์ข
์ ์ผ๋ก๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๊ฐ ์ถ๋ ฅ
JSX๋ ๊ฒฐ๊ตญ React.createElement() ํจ์ ํธ์ถ๋ก ๋ณํํ๋ค.
React ์๋ฆฌ๋จผํธ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ํจ์๋ก JSX ์ฝ๋๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ก ๋ณํํ๋ ์ญํ์ด๋ค.
React.createElement(
type, // ํ๊ทธ ์ด๋ฆ ๋๋ ์ปดํฌ๋ํธ
props, // ์์ฑ (className, id, onClick ๋ฑ)
...children // ์์ ์์ (๋ฌธ์์ด, ๋ค๋ฅธ React ์์ ๋ฑ)
)
// JSX ์ฌ์ฉํ ์ฝ๋
const element = (
<h1 className="greeting">
Hello, world!
</h1>
);
// JSX ์ฌ์ฉํ์ง ์์ ์ฝ๋
const element = React.createElement(
'h1',
{ className: 'greeting' },
'Hello, world!'
);
// ์๋ฆฌ๋จผํธ
const element = {
type: 'h1',
props: {
className: 'greeting',
children: 'Hello, world!'
}
};
jsx๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ ์ฑ๊ณผ ๋ณด์์ฑ์ด ์ฌ๋ผ๊ฐ๋ค.
React ์ฑ์ ๋ธ๋ผ์ฐ์ ์ ์ค์ DOM์ ๋ ๋๋งํ๋ ํจ์์ด๋ค.
์ฒซ๋ฒ์งธ ํ๋ผ๋ฏธํฐ์๋ ํ์ด์ง์ ๋ ๋๋งํ ๋ด์ฉ์ JSXํํ๋ก ์์ฑํ๊ณ , ๋๋ฒ์งธ ํ๋ผ๋ฏธํฐ์๋ JSX๋ฅผ ๋ ๋๋ง ํ document ๋ด๋ถ์์๋ฅผ ์ค์ ํ๋ค.
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
const container = document.getElementById('root'); // HTML์์ ๋ ๋๋งํ ์์น
const root = ReactDOM.createRoot(container); // React Root ์์ฑ
root.render(<App />); // React ์๋ฆฌ๋จผํธ๋ฅผ ๋ ๋๋ง
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ด๋ ์ ๋ ์ต์ํ๋ค๊ณ ์๊ฐํ์ง๋ง, ๋ฆฌ์กํธ๋ ์ฒ์ ์ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๊ธฐ ๋๋ฌธ์ ์์ํ ๊ฐ๋ ์ด ๋ง์๋ค. ํนํ JSX ๋ฌธ๋ฒ๊ณผ ์ปดํฌ๋ํธ ๊ตฌ์กฐ, Virtual DOM์ ๊ฐ๋ ์ด ๋ฏ์ค์๊ณ , ๋จ์ํ HTML/CSS ์์ฑ๊ณผ๋ ์ ํ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก UI๋ฅผ ๊ตฌ์ฑํ๋ค๋ ์ ์์ ๋ง๋งํจ์ ๋๊ผ๋ค. ์์ ์ฝ๋๋ฅผ ์ฌ๋ฌ ๋ฒ ์ค์ตํด๋ณด๋ render() ๋ก ํ๋ฉด์ ๊ทธ๋ฆฌ๋๊ฑฐ์ ๋ํ ๊ฐ๋ ์ด ์กํ๋ ๊ฒ ๊ฐ์๋ค.