JSX๋ JavaScript XML์ ์ค์๋ง๋ก, React์์ UI๋ฅผ ๊ตฌ์ฑํ ๋ ์ฌ์ฉํ๋ JavaScript๋ฅผ ํ์ฅํ ๋ฌธ๋ฒ์ด๋ค.
JSX๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฐ๋ก ์คํํ ์ ์๋ JavaScript ์ฝ๋๊ฐ ์๋๊ธฐ ๋๋ฌธ์, ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ JavaScript ์ฝ๋๋ก ๋ณํ(์ปดํ์ผ)ํ๋ ์์ ์ด ํ์ํ๋ค.
์ด ๋ Babel ์ด ์์์ JSX ์ฝ๋๋ฅผ ๋ณํํด ์ค ํ, JavaScript๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์ฝ๊ณ ํ๋ฉด์ ๋ ๋๋งํ ์ ์๋ค.
๋ํ, React์์๋ DOM๊ณผ ๋ค๋ฅด๊ฒ CSS, JSX ๋ฌธ๋ฒ๋ง์ ๊ฐ์ง๊ณ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์๋ค.
์ฆ, JSX ์ฌ์ฉ ์, JavaScript ๋ง์ผ๋ก ๋งํฌ์ ํํ์ ์ฝ๋๋ฅผ ์์ฑํ์ฌ DOM์ ๋ฐฐ์นํ ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
DOM์์ JavaScript์ ํจ๊ป ์ฌ์ฉํ๊ธฐ ์ํด์๋ JavaScript์ HTML์ ์ฐ๊ฒฐํ๋ ์์ ์ด ํ์ํ๋ค.
๊ทธ๋ฌ๋, React์์๋ JSX๋ฅผ ์ด์ฉํ์ฌ ๋ณด๋ค ๋ช ์์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ฅ๊ณผ ๊ตฌ์กฐ๋ฅผ ํ ๋์ ํ์ธํ ์ ์๋ค. ์๋๋ ์์ ์์ ์ ๋์ผํ๊ฒ ๋์ํ๋ ์ฝ๋์ด๋ค.
JSX๋ฅผ ์ด์ฉํ์ง ์๊ณ React์์๋ฅผ ๋ง๋ค ์๋ ์์ง๋ง, ์ฝ๋๊ฐ ๋ณต์กํ๊ณ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ค.
JSX์์ ์ฌ๋ฌ element๋ฅผ ์์ฑํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ, ์ต์์์์ opening tag์ closing tag๋ก ๊ฐ์ธ์ฃผ์ด์ผ ํ๋ค.
className
์ผ๋ก ํ๊ธฐํ๋ค.React element๊ฐ JSX๋ก ์์ฑ๋ ๋, ์๋ฌธ์๋ก ์์ํ๋ฉด ์ผ๋ฐ์ ์ธ HTML element๋ก ์ธ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ฌธ์๋ก ์์ํด์ผํ๋ค.
map( )
ํจ์๋ฅผ ์ฌ์ฉํด์ผํ๋ค.map()
์ฌ์ฉ ์, ๋ฐ๋์ key
JSX ์์ฑ์ ๋ฃ์ด์ผ ํ๋ค.
const posts = [
{ id: 1, title: "Hello World", content: "Welcome to learning React" },
{ id: 2, title: "Installation", content: "You can install React from npm" }
];
export default function App() {
// ํ ํฌ์คํธ์ ์ ๋ณด๋ฅผ ๋ด์ ๊ฐ์ฒด post๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๊ณ
// obj๋ฅผ JSX ํํ์์ผ๋ก ๋ฐ๊ฟ ๋ฆฌํดํด์ฃผ๋ ํจ์ postToJSX
const postToJSX = (post) => {
return (
<div key={post.id}>
<h3>{post.title}</h3>
<p>{post.content}</p>
</div>
);
};
return (
<div className="App">
<h1>Hello JSX</h1>
{posts.map(postToJSX)}
</div>
);
}
Reference: ์ฝ๋์คํ ์ด์ธ