๐งธ JSX์ ์ ์
- ๋ฆฌ์กํธ์ ์ข
์์ ์ด์ง ์์ ๋
์์ ์ธ ๋ฌธ๋ฒ
- XML๊ณผ ์ ์ฌํ ๋ด์ฅํ ๊ตฌ๋ฌธ
- ECMAScript๋ผ๊ณ ๋ถ๋ฆฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ค์ ์ผ๋ถ๋ ์๋
- ์ฆ, ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ด๋ถ์์ ํํํ๊ธฐ ๊น๋ค๋ก์ ๋ XML ์คํ์ผ์ ํธ๋ฆฌ ๊ตฌ๋ฌธ์ ์์ฑํ๋ ๋ฐ ๋ง์ ๋์์ ์ฃผ๋ ์๋ก์ด ๋ฌธ๋ฒ์ด๋ผ๊ณ ๋ณผ ์ ์์
๐ค ๋ด์ฅํ ๊ตฌ๋ฌธ(embedded syntax)?
JavaScript ์ฝ๋ ๋ด์ ์ง์ '๋ด์ฅ'๋์ด ์ฌ์ฉ๋ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธJSX๋ฅผ ์ฌ์ฉํ๋ฉด HTML๊ณผ ์ ์ฌํ ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ UI ๊ตฌ์กฐ๋ฅผ ์ง์ ์ ์ผ๋ก JavaScript ์ฝ๋ ๋ด์ ์์ฑํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธ
// ์ ํต์ ์ธ JavaScript์์ DOM ์์๋ฅผ ์์ฑํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํจ.
const title = document.createElement("h1");
title.textContent = "Hello, world!";
document.body.appendChild(title);
// JSX๋ฅผ ์ฌ์ฉํ๋ฉด ์ด์ ๊ฐ์ UI ๊ตฌ์กฐ๋ฅผ ํจ์ฌ ๋ ์ง๊ด์ ์ผ๋ก ํํํ ์ ์์.
const title = <h1>Hello, world!</h1>;
๐งธ JSX์ ํน์ง
- ๋ฐ๋์
ํธ๋์คํ์ผ๋ฌ
๋ฅผ ๊ฑฐ์ณ์ผ ๋น๋ก์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์์ด ์ดํดํ ์ ์๋ ์๋ฏธ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ก ๋ณํ๋จ
- HTML์ด๋ XML์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ด๋ถ์ ํํํ๋ ๊ฒ์ด ์ ์ผํ ๋ชฉ์ ์ ์๋
- HTML, XML ์ธ์๋ ๋ค๋ฅธ ๊ตฌ๋ฌธ์ผ๋ก๋ ํ์ฅ๋ ์ ์๊ฒ๋ ๊ณ ๋ ค๋ผ ์์ผ๋ฉฐ ์ต๋ํ ๊ตฌ๋ฌธ์ ๊ฐ๊ฒฐํ๊ณ ์น์ํ๊ฒ ์์ฑํ ์ ์๋๋ก ์ค๊ณ๋ผ ์์
- XML๊ณผ ๋น์ทํ๊ฒ ๋ณด์ด๋ ๊ฒ์ ๋จ์ํ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์๋ก ํ์ฌ๊ธ ์น์ํจ์ ๋๋ ์ ์๋๋ก ํ๋ ๊ฒ
- JSX์ ์ค๊ณ ๋ชฉ์ ์ ๋ค์ํ
ํธ๋์คํ์ผ๋ฌ
์์ ๋ค์ํ ์์ฑ์ ๊ฐ์ง ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํ ํฐํํด ECMAScript๋ก ๋ณํํ๋ ๋ฐ ์ด์ ์ ๋๊ณ ์์
๐งธ JSX ๊ตฌ์ฑ
- ๊ธฐ๋ณธ์ ์ผ๋ก JSXElement, JSXAttributes, JSXChildren, JSXStrings๋ผ๋ 4๊ฐ์ง ์ปดํฌ๋ํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์
1. JSXElement
- JSX๋ฅผ ๊ตฌ์ฑํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ ์์
- HTML์ ์์(element)์ ๋น์ทํ ์ญํ ์ ํจ
- ๋ค์๊ณผ ๊ฐ์ ํํ ์ค ํ๋์ฌ์ผ ํจ
- JSXOpeningElement
<JSXElement JSXAttributes(optional)>
- JSXClosingElement
- JSXOpeningElement๊ฐ ์ข
๋ฃ๋์์ ์๋ฆฌ๋ ์์
- ๋ฐ๋์ JSXOpeningElement์ ์์ผ๋ก ์ฌ์ฉ๋ผ์ผ ํจ
</JSXElement>
- JSXSelfClosingElement
- ์์๊ฐ ์์๋๊ณ , ์ค์ค๋ก ์ข
๋ฃ๋๋ ํํ๋ฅผ ์๋ฏธ (๋ด๋ถ์ ์ผ๋ก ์์์ ํฌํจํ ์ ์๋ ํํ๋ฅผ ์๋ฏธ)
<script />
์ ๋์ผํ ๋ชจ์ต์ ๋ ๊ณ ์์
<JSXElement JSXAttributes(optional) />
- JSXFragment
- ์๋ฌด๋ฐ ์์๊ฐ ์๋ ํํ
<>JSXChildren(optional)</>
๐ ๋ฆฌ์กํธ์์ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ ๋, ๋๋ฌธ์๋ก ์์ํด์ผํ๋ ์ด์