๐Ÿ–ฅFrontEnd/React

TIL) JSX๋ž€? JSX ์“ฐ๋Š” ์ด์œ , JSX ๋ฌธ๋ฒ•

hellohailie 2022. 6. 2. 01:34

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 ์†์„ฑ์„ ์ž‘์„ฑํ•ด์•ผํ•œ๋‹ค.