๐ฌ ReactJS๋ก ์ํ ์น ์๋น์ค ๋ง๋ค๊ธฐ (01) - JSX
JSX
JSX๋?
JavaScript๋ฅผ ํ์ฅํ ๋ฌธ๋ฒ
๊ธฐ์กด ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ jsx๋ก ๋ฐ๊ฟ๋ณด์!
- ๊ธฐ์กด javaScript ์ฝ๋ (์์๋ฅผ ์์ฑํ๋ ์ค๋๋ ๋ฐฉ์)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!DOCTYPE html>
<html lang="en">
<body>
<div id="root"></div>
</body>
<script src="https://unpkg.com/react@17.0.2/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@17.0.2/umd/react-dom.production.min.js"></script>
<script>
const root = document.getElementById("root");
const h3 = React.createElement(
"h3",
{
id: "title",
onMouseEnter: () => console.log("mouse enter")
},
"Hello I'm a title"
);
const btn = React.createElement(
"button",
{
onClick: () => console.log("im clicked"),
style: {
backgroundColor: "tomato"
}
},
"Click me"
);
// ๋ฐฐ์ด์ ์ด์ฉํด์ ์ฌ๋ฌ ์์๋ฅผ ํ๋ฒ์ render
const container = React.createElement("div", null, [h3, btn]);
ReactDOM.render(container, root);
</script>
</html>
- jsx ์ด์ฉํ ์ฝ๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<!DOCTYPE html>
<html lang="en">
<body>
<div id="root"></div>
</body>
<script src="https://unpkg.com/react@17.0.2/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@17.0.2/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<script type="text/babel">
const root = document.getElementById("root");
const Title = () => (
<h3 id="title" onMouseEnter={() => console.log("mouse enter")}>
Hello I'm a title
</h3>
);
const Button = () => (
<buttonstyle="backgroundColor: tomato;"
onClick={() => console.log("im clicked")}
>
Click me
</button>
);
const Container = () => (
<div>
<Title />
<Button />
</div>
);
ReactDOM.render(<Container />, root);
</script>
</html>
JSX
๋ ๊ธฐ์กด์createElement
์ ์ฌ์ฉํ์ง ์๊ณ , ์ผ๋ฐ์ ์ธ HTML์์ฑ๋ฐฉ์๊ณผ ์ ์ฌํ ๋ฐฉ์์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋คonMouseEnter
์ ๊ฐ์property
๋ค๋ ๋ง์น ํ๊ทธ๊ฐ ๊ฐ์ง ํ๋์ ์์ฑ์ธ ๊ฒ์ฒ๋ผ ํ๊ทธ ์์ ์ถ๊ฐํจ
๊ทธ๋ฐ๋ฐ !
์ ๋ ๊ฒ๋ง ์์ฑํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํด๋ณด๋ฉด ์๋ ์ฌ์ง๊ณผ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค ๐
๊ทธ ์ด์ ๋ ๋ฐ๋ก
๋ธ๋ผ์ฐ์ ๊ฐ ์จ์ ํ JSX๋ฅผ ์ดํดํ๋ ๊ฒ์ ์๋๊ธฐ ๋๋ฌธ!
๊ทธ๋์ ๋ธ๋ผ์ฐ์ ๊ฐ JSX๋ฅผ ์ดํดํ ์ ์๋๋ก Babel์ด๋ผ๋ ๊ฒ์ ์ฌ์ฉํ๋ค
Babel์ JSX๋ก ์ ์ ์ฝ๋๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ ํํ๋ก ๋ฐ๊พธ์ด์ฃผ๋ ์ญํ ์ ํจ
Babel์ Try it out ํ์ด์ง์์ ๋ด๊ฐ ์์ฑํ JSX ์ฝ๋๋ฅผ ์
๋ ฅํ๊ณ ์ด๋ป๊ฒ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ณํ๋๋์ง ํ์ธํด ๋ณผ ์ ์๋ค!
๊ฒฐ๊ณผ๋ฅผ ํ์ธํด๋ณด๋ฉด ๊ธฐ์กด์ javaScirpt๋ก ์์ฑํ๋ ์ฝ๋์ ๊ฐ๋ค๋ ๊ฒ์ ์ ์ ์๋ค
์ํผ !
์ข์ ์ ์๋ฌ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด babel์ ์ค์นํด์ฃผ์ด์ผ ํ๋ค
์ผ๋จ์ ๊ฐ๋จํ๊ฒ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ์์ผ๋ก babel์ ์ ์ฉ์์ผ๋ณด์
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!DOCTYPE html>
<html lang="en">
<body>
<div id="root"></div>
</body>
<script src="https://unpkg.com/react@17.0.2/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@17.0.2/umd/react-dom.production.min.js"></script>
<!-- Babel ์ ์ฉ์ ์ํด ์ฝ๋ ์ถ๊ฐ-->
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<!-- Babel ์ ์ฉ์ ์ํด ์ฝ๋ ์ถ๊ฐ-->
<script type="text/babel">
const root = document.getElementById("root");
const Title = () => (
<h3 id="title" onMouseEnter={() => console.log("mouse enter")}>
Hello I'm a title
</h3>
);
const Button = () => (
<buttonstyle="backgroundColor: tomato;"
onClick={() => console.log("im clicked")}
>
Click me
</button>
);
const Container = () => (
<div>
<Title />
<Button />
</div>
);
ReactDOM.render(<Container />, root);
</script>
</html>
์ ์๋ํ๋ ๊ฒ์ ํ์ธ ํ ์ ์๋ค !