JSX๋?
JavaScript XML
๋ฆฌ์กํธ์์ UI๋ฅผ ๊ตฌ์ฑํ ๋ ์ฌ์ฉํ๋ ๋ฌธ๋ฒ์ผ๋ก JS๋ฅผ ํ์ฅํ ๋ฌธ๋ฒ์ด๋ค.
JSX๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฐ๋ก ์คํํ ์ ์๋ JS์ฝ๋๊ฐ ์๋๋ผ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ JS ์ฝ๋๋ก ๋ณํ์์ผ์ค์ผํ๋ค.
์ด๋, Babel์ ์ฌ์ฉํ๋ค.
Babel๊ฐ JSX๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ JS๋ก ์ปดํ์ผํ๋ค.
์ปดํ์ผ์ ํ๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ JS๋ฅผ ์ฝ๊ณ ํ๋ฉด์ ๋ ๋๋งํ ์ ์๊ฒ ๋๋ค.
JSX๋ฅผ ์ฌ์ฉํ๋ฉด JS๋ง์ผ๋ก ๋งํฌ์ ํํ์ ์ฝ๋๋ฅผ ์์ฑํด์ DOM์ ๋ฐฐ์นํ ์ ์๊ฒ ๋๋ค.
(CSS, JSX ๋ฌธ๋ฒ๋ง์ ๊ฐ์ง๊ณ ์น ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ๊ฐ๋ฅ!)
์ฃผ์ํ ์ ! JSX์ HTML์ฒ๋ผ ์๊ฒผ์ง๋ง, HTML์ด ์๋๊ธฐ ๋๋ฌธ์ “Babel”์ ์ด์ฉํ ์ปดํ์ผ ๊ณผ์ ์ด ํ์ํ๋ค.
JSX๋ฅผ ์ ์จ์ผํ์ง?
DOM ์ฝ๋๋ณด๋ค ๋ช ์์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋ณต์ก์ฑ์ ์ค์ด๊ณ , ๊ฐ๋ ์ฑ์ ๋์ผ ์ ์๋ค.
(JS๋ฌธ๋ฒ๊ณผ HTML ๋ฌธ๋ฒ์ ๋์์ ์ด์ฉํด์ ๊ธฐ๋ฅ๊ณผ ๊ตฌ์กฐ๋ฅผ ํ๋์ ํ์ธ ๊ฐ๋ฅํ๋ค.)
์ปดํฌ๋ํธ : ๊ตฌ์กฐ์ ๋์์ ๋ํ ์ฝ๋๋ฅผ ํ ๋ญ์น๋ก ์ ์ ์ฝ๋์ ์ด๋ค.
๐if (JSX ์์ด ๋ฆฌ์กํธ ๊ฐ๋ฐ){
๋ณต์กํ๊ณ , ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ค.
}
return React.createElement(
'hi', null, `Hello, ${formatName(user)}!`
)
๐if (JSX ๋ก ๋ฆฌ์กํธ ๊ฐ๋ฐ){
๋ณต์ก์ฑ์ ์ค์ด๊ณ , ๊ฐ๋ ์ฑ์ด ์ข์์ง๋ค.
}
return <h1>Hello, {formatName(user)}!</h1>;
JSX ๋ฌธ๋ฒ
1. JSX์์ ์ฌ๋ฌ ์๋ฆฌ๋จผํธ๋ฅผ ์์ฑํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ, ์ต์์์์ opening tag์ closing tag๋ก ๊ฐ์ธ์ผํ๋ค.
โญ๏ธ
<div>
<div>
<h1>Hello<h1>
</div>
<div>
<h2>World<h2>
</div>
</div>
โ
<div>
<h1>Hello<h1>
</div>
<div>
<h2>World<h2>
</div>
**๊ผญ <div></div>์ฒ๋ผ ์๋ฆฌ๋จผํธ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ , <></>์ฒ๋ผ ๋น ์๋ฆฌ๋จผํธ๋ฅผ ์ฌ์ฉํด๋ ๋๋ค.
2. ์๋ฆฌ๋จผํธ ํด๋์ค ์ฌ์ฉ ์, className ์ผ๋ก ํ๊ธฐํด์ผํ๋ค.
๋ง์ฝ class๋ก ์์ฑํ๋ค๋ฉด, React์์ HTML ํด๋์ค ์์ฑ ๋์ JS ํด๋์ค๋ก ๋ฐ์๋ค์ธ๋ค.
โญ๏ธ
<div className='greeting'>Hello!</div>
โ
<div class='greeting'>Hello!</div>
3. JS ํํ์ ์ฌ์ฉ ์, ์ค๊ดํธ {} ์ฌ์ฉํด์ผํ๋ค.
JSX์์ JS์ฐ๋ ค๋ฉด ๊ผญ ์ค๊ดํธ ์ฌ์ฉํ๊ธฐ!
๋ณ์๋ช , ํจ์๋ช , ์ด๋ฏธ์ง import ๋ช , class ๋ช ๋ฑ๋ฑ.. ์์ํ๋ ๋ชจ๋ ๊ณณ์ {} ๋ณ์ ์ง์ด๋ฃ๊ธฐ ๊ฐ๋ฅ!
style ์์ฑ ์ง์ด๋ฃ์๋ style={object ์๋ฃํ์ผ๋ก ๋ง๋ ์คํ์ผ}
ex)
<div style={{color:'blue', fontSize:'30px'}}></div>
์ค๊ดํธ ์์ฐ๋ฉด ์ผ๋ฐ ํ ์คํธ๋ก ์ธ์ํ๋ค.
-๋์๋ฐ ๋ชป์ด๋ค. camelCase๋ก ์จ์ผํ๋ค.
4. ์ฌ์ฉ์ ์ ์ ์ปดํฌ๋ํธ๋ ๋๋ฌธ์๋ก ์์ํ๋ค.
React ์๋ฆฌ๋จผํธ๊ฐ JSX๋ก ์์ฑ๋๋ฉด "๋๋ฌธ์"๋ก ์์ํด์ผ ํ๋ค.
์๋ฌธ์๋ก ์ฐ๋ฉด ์ผ๋ฐ์ ์ธ HTML ์๋ฆฌ๋จผํธ๋ก ์ธ์ํ๋ค.
์ด๋ ๊ฒ ๋๋ฌธ์๋ก ์์ฑ๋ JSX ์ปดํฌ๋ํธ๋ฅผ ๋ฐ๋ก ์ฌ์ฉ์ ์ ์ ์ปดํฌ๋ํธ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
โญ๏ธ
function Hello() {
return <div>Hello!</div>
}
function HelloWorld() {
return <Hello />
}
โ
function hello() {
return <div>Hello!</div>
}
function HelloWorld() {
return <hello />
}
5. ์กฐ๊ฑด๋ถ ๋ ๋๋ง์๋ ์ผํญ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ค.
if๋ฌธ ๋ง๊ณ ์ผํญ์ฐ์ฐ์ ์ฌ์ฉํ๊ธฐ!
<div>
{
(1+1 === 2) ? (<p>์ ๋ต</p>) : (<p>ํ๋ฝ</p>)
}
</div>
์ถ๊ฐํ์ต ํ์
์ผํญ์ฐ์ฐ์
6. ์ฌ๋ฌ๊ฐ์ HTML ์๋ฆฌ๋จผํธ ํ์ํ ๋, map() ํจ์๋ฅผ ์ด์ฉํ๋ค.
const posts = [
{id:1, title:'Hello World', content:'Welcome to learning React!'},
{id:2, title:'Installation', content:'You cna install React from npm'}
];
function Blog() {
const content = posts.map((post) =>
<div key={post.id}>
<h3>{post.title}</h3>
<p>{post.content}</p>
</div>
);
return (
<div>
{content}
</div>
);
}
map() ํจ์๋ฅผ ์ฌ์ฉํ ๋๋ ๋ฐ๋์ 'key' JSX ์์ฑ์ ๋ฃ์ด์ผํ๋ค.
'key' JSX ์์ฑ์ ๋ฃ์ง ์์ผ๋ฉด ๋ฆฌ์คํธ์ ๊ฐ ํญ๋ชฉ์ key๋ฅผ ๋ฃ์ด์ผ ํ๋ค๋ ๊ฒฝ๊ณ ๊ฐ ๋ฌ๋ค.
- ๋ฐ์ดํฐ์ id๋ฅผ key๋ก ์ฌ์ฉํ ์ ์๋ค.
- ๋ณํ์ง ์๊ณ , ์์ ๊ฐ๋ฅํ๋ฉฐ, ์ ์ผํ id๊ฐ ์์ผ๋ฉด ํญ๋ชฉ์ ์ธ๋ฑ์ค๋ฅผ key๋ก ์ฌ์ฉํ๋ค.
- ์ปดํฌ๋ํธ์ ์ต์์ ์๋ฆฌ๋จผํธ์ key ์์ฑ์ ์์ฑํด์ผํ๋ค.