Search

JSX

JSX

JavaScript + (XML/HTML)
React์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ™•์žฅ ๋ฌธ๋ฒ•์œผ๋กœ, XML ๋˜๋Š” HTML๊ณผ ์œ ์‚ฌํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. JSX๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด React ์š”์†Œ๋ฅผ ์ข€ ๋” ๊ฐ„ํŽธํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” React์—์„œ UI๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ์— ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ ๋‚ด์— ๋งˆํฌ์—…์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

๋™์ž‘

JSX ๋ฌธ๋ฒ•์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ์ฝ”๋“œ๋Š” React ์˜ createElement ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” JavaScript ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.
JSX JavaScript ๋กœ ๋ณ€ํ™˜ React ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ƒ์„ฑ ๊ฐ€์ƒ DOM ์‹ค์ œ DOM

๋ฌธ๋ฒ•์‚ฌํ•ญ

1.
ํ•˜๋‚˜์˜ ๋ฃจํŠธ ์—˜๋ฆฌ๋จผํŠธ
2.
์š”์†Œ (Element)
3.
ํ‘œํ˜„์‹ (Expression)
4.
์†์„ฑ ์‚ฌ์šฉ
5.
JSX ๋‚ด๋ถ€์˜ ์กฐ๊ฑด๋ฌธ
6.
JSX ๋‚ด๋ถ€์˜ ๋ฐ˜๋ณต๋ฌธ
7.
์Šคํƒ€์ผ ์ ์šฉ
a.
์ธ๋ผ์ธ ์Šคํƒ€์ผ ๋ฐฉ์‹
b.
ํด๋ž˜์Šค ์ง€์ • ๋ฐฉ์‹
8.
์ฃผ์„

ํ•˜๋‚˜์˜ ๋ฃจํŠธ ์—˜๋ฆฌ๋จผํŠธ

์ตœ์ƒ์œ„(๋ฃจํŠธ) ์—˜๋ฆฌ๋จผํŠธ๋Š” ํ•˜๋‚˜๋กœ, ์ž์‹ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๊ฐ์‹ธ์•ผํ•œ๋‹ค.
์ž‘์„ฑ๋œ ์ฝ”๋“œ๊ฐ€ ๊ฐ€์ƒ DOM ์œผ๋กœ ์ƒ์„ฑ๋˜์–ด์•ผํ•˜๋Š”๋ฐ, ๊ฐ€์ƒ DOM ์€ ํŠธ๋ฆฌ๊ตฌ์กฐ์ด๋‹ค. ํŠธ๋ฆฌ๊ตฌ์กฐ๋Š” ์ตœ์ƒ์œ„ ๋…ธ๋“œ์ธ ๋ฃจํŠธ๊ฐ€ 1๊ฐœ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๊ฐ€์ƒ DOM ํŠธ๋ฆฌ๊ตฌ์กฐ์— ๋งž๊ฒŒ ์ตœ์ƒ์œ„ ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ 1๊ฐœ๋กœ ์ œ๊ณต๋˜์–ด์•ผํ•œ๋‹ค.
JSX ๋กœ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” React ๊ฐ€ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ(React.createElement)๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ํ›„ ๋ Œ๋”๋ง ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋กœ ๋ Œ๋”๋ง ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ React ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋กœ Virtual DOM ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
React ์˜ Virtual DOM ์€ ๊ฐ ์ปดํฌ๋„ŒํŠธ ํ•˜๋‚˜๋ฅผ ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋กœ ํ•˜์—ฌ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ๋ฌธ์—, ๊ฐ€์ƒ DOM ์— ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ ํŠธ๋ฆฌ ๊ตฌ์กฐ ํ˜•ํƒœ๋กœ ์ตœ์ƒ์œ„์˜ ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง„ ํ˜•ํƒœ๋กœ ์ œ๊ณต๋˜์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—˜๋ฆฌ๋จผํŠธ ๋“ค์„ ํ•˜๋‚˜์˜ ๋ฃจํŠธ ์—˜๋ฆฌ๋จผํŠธ๋กœ ๊ฐ์‹ธ์„œ ์ž‘์„ฑํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
ํŠธ๋ฆฌ ๊ตฌ์กฐ์—์„œ ๋ฃจํŠธ๋Š” ํŠธ๋ฆฌ์˜ ์‹œ์ž‘ ์ง€์ ์ด๋ฉฐ, ๊ฐ ๋…ธ๋“œ๋Š” ํ•˜์œ„ ๋…ธ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. React๊ฐ€ ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํŠธ๋ฆฌ์˜ ์‹œ์ž‘์ ์ด ๋˜๋Š” ๋ฃจํŠธ ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
React์—์„œ๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฃจํŠธ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ง์ ‘ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐ˜ํ™˜๋˜๋Š” JSX๋Š” ํ•˜๋‚˜์˜ ๋ฃจํŠธ ์—˜๋ฆฌ๋จผํŠธ๋กœ ๊ฐ์‹ธ์ ธ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์œ„์˜ ์ž˜๋ชป๋œ ์˜ˆ์‹œ์—์„œ์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ๋ฃจํŠธ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ง์ ‘ ๋ฐ˜ํ™˜ํ•˜๋ฉด React๊ฐ€ ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์–ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•˜๋‚˜์˜ ๋ถ€๋ชจ ์—˜๋ฆฌ๋จผํŠธ๋กœ ๊ฐ์‹ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋ž˜๊ทธ๋จผํŠธ (Fragment)

์—ฌ๋Ÿฌ ์š”์†Œ๋ฅผ ๊ทธ๋ฃนํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํŠน์ˆ˜ํ•œ ํ˜•ํƒœ์˜ ์ปดํฌ๋„ŒํŠธ
React 16.2.0 ๋ฒ„์ „๋ถ€ํ„ฐ ๋„์ž…

๋ฌธ๋ฒ•

<></>
JavaScript
๋ณต์‚ฌ
<React.Fragment></React.Fragment>
JavaScript
๋ณต์‚ฌ
function MyComponent() { return ( <> <h1>Title</h1> <p>Paragraph content</p> </> ); }
JavaScript
๋ณต์‚ฌ
function MyComponent() { return ( <React.Fragment> <h1>Title</h1> <p>Paragraph content</p> </React.Fragment> ); }
JavaScript
๋ณต์‚ฌ
Fragment๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ถ€๋ชจ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ถ”๊ฐ€๋กœ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž์‹ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๊ทธ๋ฃนํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํŠนํžˆ ๋ถˆํ•„์š”ํ•œ DOM ์š”์†Œ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ ์ž ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
๋ช…์‹œ์ ์œผ๋กœ React.Fragment๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค

<></> vs <div></div>

: ํ”„๋ž˜๊ทธ๋จผํŠธ(Fragment) ๋กœ ๋ฌถ์€ ๊ฒฝ์šฐ๋Š” ์‹ค์ œ๋กœ ๋ถ€๋ชจ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
โ€ข
<></> ์‚ฌ์šฉ
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Fragment</title> </head> <body> <h1>Title</h1> <p>Paragraph content</p> </body> </html>
JavaScript
๋ณต์‚ฌ
โ€ข
<div></div> ์‚ฌ์šฉ
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>div</title> </head> <body> <div> <h1>Title</h1> <p>Paragraph content</p> </div> </body> </html>
JavaScript
๋ณต์‚ฌ

์—˜๋ฆฌ๋จผํŠธ (Element)

๋ธŒ๋ผ์šฐ์ €์— ์ปจํ…์ธ ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ํ•˜๋‚˜์˜ ๋‹จ์œ„
์—˜๋ฆฌ๋จผํŠธ๋Š” React์—์„œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‹ค์ œ๋กœ ๋ธŒ๋ผ์šฐ์ €์— ๋‚˜ํƒ€๋‚ด๋Š” ๋‚ด์šฉ์„ ํ‘œํ˜„ํ•˜๋Š” ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. React์—์„œ ์—˜๋ฆฌ๋จผํŠธ๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋ฉฐ, ๊ฐ ์—˜๋ฆฌ๋จผํŠธ๋Š” ๊ฐ€์ƒ DOM (Virtual DOM)์—์„œ ์ปดํฌ๋„ŒํŠธ์˜ ์ธ์Šคํ„ด์Šค์— ๋Œ€์‘ํ•ฉ๋‹ˆ๋‹ค.
JSX์—์„œ๋Š” ๋ชจ๋“  ์—˜๋ฆฌ๋จผํŠธ์— ๋Œ€ํ•ด ์ข…๋ฃŒ ํƒœ๊ทธ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
(HTML์—์„œ๋Š” ๋ช‡๋ช‡ ํƒœ๊ทธ์—์„œ ๋‹ซ๋Š” ํƒœ๊ทธ๊ฐ€ ์ƒ๋žต๋˜์–ด๋„ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.)
HTML ์ธ ๊ฒฝ์šฐ OK
<input type="text" name="test">
HTML
๋ณต์‚ฌ
React ์ธ ๊ฒฝ์šฐ ERROR
<input type="text" name="test">
HTML
๋ณต์‚ฌ
React ์ธ ๊ฒฝ์šฐ
<input type="text" name="test" />
HTML
๋ณต์‚ฌ
์ข…๋ฃŒ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๋Š” / ๋ฅผ ๋ฐ›๋“œ์‹œ ๋ช…์‹œํ•ด์•ผํ•œ๋‹ค.

์—˜๋ฆฌ๋จผํŠธ์˜ ์ƒ์„ฑ

React ์—˜๋ฆฌ๋จผํŠธ๋Š” JavaScript ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. JSX ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด HTML๊ณผ ์œ ์‚ฌํ•œ ๋ฌธ๋ฒ•์œผ๋กœ React ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
const element = <h1>Hello, World!</h1>;
JavaScript
๋ณต์‚ฌ

์—˜๋ฆฌ๋จผํŠธ์˜ ํŠน์ง•

React ์—˜๋ฆฌ๋จผํŠธ๋Š” ๊ฐ€์ƒ DOM์—์„œ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ ๋ณ€ํ™”์— ๋”ฐ๋ผ ์—…๋ฐ์ดํŠธ๋˜๊ณ , React๊ฐ€ ์ด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ์‹ค์ œ DOM์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.
const element = <p>{new Date().toLocaleTimeString()}</p>;
JavaScript
๋ณต์‚ฌ

์—˜๋ฆฌ๋จผํŠธ์˜ ๋ Œ๋”๋ง

React ์—˜๋ฆฌ๋จผํŠธ๋Š” ReactDOM.render()๋‚˜ ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋” ๋ฉ”์†Œ๋“œ ๋“ฑ์„ ํ†ตํ•ด ์‹ค์ œ DOM์— ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค.
ReactDOM.render(element, document.getElementById('root'));
JavaScript
๋ณต์‚ฌ

์—˜๋ฆฌ๋จผํŠธ์˜ ๊ตฌ์„ฑ์š”์†Œ

โ€ข
์ปจํ…์ธ 
โ—ฆ
ํ…์ŠคํŠธ
โ—ฆ
์ž์‹ ์—˜๋ฆฌ๋จผํŠธ
โ€ข
์†์„ฑ

์—˜๋ฆฌ๋จผํŠธ์— ํ…์ŠคํŠธ ์ปจํ…์ธ ๋งŒ ๊ตฌ์„ฑ

const element = <h1>Hello, World!</h1>;
JavaScript
๋ณต์‚ฌ

์—˜๋ฆฌ๋จผํŠธ์— ์ž์‹ ์—˜๋ฆฌ๋จผํŠธ ๊ตฌ์„ฑ

const element = ( <div> <h1>Title</h1> <p>Paragraph content</p> </div> );
JavaScript
๋ณต์‚ฌ

์—˜๋ฆฌ๋จผํŠธ ์†์„ฑ

JSX์—์„œ๋Š” HTML๊ณผ ์œ ์‚ฌํ•œ ์†์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ช‡ ๊ฐ€์ง€ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

html ๊ณผ ์ฐจ์ด๊ฐ€ ์žˆ๋Š” React ์—˜๋ฆฌ๋จผํŠธ ์†์„ฑ

1.
class ์†์„ฑ
2.
style ์†์„ฑ

class ์†์„ฑ

JSX์—์„œ๋Š” HTML์˜ class ์†์„ฑ์„ className์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” JavaScript์—์„œ class๋Š” ์˜ˆ์•ฝ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
// HTML <div class="my-class">Hello</div> // JSX <div className="my-class">Hello</div>
HTML
๋ณต์‚ฌ

style ์†์„ฑ

HTML์—์„œ๋Š” style ์†์„ฑ์— ๋ฌธ์ž์—ด๋กœ CSS๋ฅผ ์ง€์ •ํ–ˆ์ง€๋งŒ, JSX์—์„œ๋Š” ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ์Šคํƒ€์ผ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
// HTML <div style="color: red; font-size: 16px;">Hello</div> // JSX <div style={{ color: 'red', fontSize: '16px' }}>Hello</div>
HTML
๋ณต์‚ฌ

ํ‘œํ˜„์‹ (Expression)

{ } ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ, JavaScript ์˜ ์ˆ˜์‹, ๋ณ€์ˆ˜, ํ•จ์ˆ˜ ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•
.JSX ๋‚ด์—์„œ ์ค‘๊ด„ํ˜ธ {}๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JavaScript ํ‘œํ˜„์‹์„ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ‘œํ˜„์‹์€ ๋™์ ์œผ๋กœ ๊ฐ’์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๋ณ€์ˆ˜, ํ•จ์ˆ˜ ๋“ฑ์„ ์‚ฌ์šฉํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
import React from 'react'; import ReactDOM from 'react-dom'; // ๋ณ€์ˆ˜ ์„ ์–ธ const name = 'aloha'; // ํ•จ์ˆ˜ ์ •์˜ const formatName = (name) => { return name.toUpperCase(); }; // JSX๋ฅผ ์ง์ ‘ ๋ Œ๋”๋ง const element = ( <div> {/* ๋ณ€์ˆ˜ ์‚ฌ์šฉ */} <p>Hello, {name}!</p> {/* ํ•จ์ˆ˜ ํ˜ธ์ถœ */} <p>Formatted Name: {formatName(name)}</p> {/* ์‚ฐ์ˆ  ์—ฐ์‚ฐ */} <p>2 + 2 = {2 + 2}</p> </div> ); // JSX ๋ Œ๋”๋ง ReactDOM.render(element, document.getElementById('root'));
JavaScript
๋ณต์‚ฌ

JSX ๋‚ด๋ถ€์˜ ์กฐ๊ฑด๋ฌธ

JSX ์•ˆ์—์„œ๋Š” ์ผ๋ฐ˜์ ์ธ JavaScript์˜ if, switch ๋ฌธ์„ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€์‹ ์— JSX ๋‚ด์—์„œ๋Š” JavaScript ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ์กฐ๊ฑด๋ถ€ ์—ฐ์‚ฐ์ž(์‚ผํ•ญ ์—ฐ์‚ฐ์ž)๋‚˜ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
์กฐ๊ฑด์— ๋”ฐ๋ผ์„œ ์ถœ๋ ฅ ๋˜๋Š” ๋ฏธ์ถœ๋ ฅ ํ•ด์•ผํ•  ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
1.
์กฐ๊ฑด๋ถ€ ์—ฐ์‚ฐ์ž(์‚ผํ•ญ ์—ฐ์‚ฐ์ž)
2.
AND ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž&&
3.
OR ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž ||

์กฐ๊ฑด๋ถ€ ์—ฐ์‚ฐ์ž(์‚ผํ•ญ ์—ฐ์‚ฐ์ž)

const X = โ“; const element = ( <div> { X ? <p>A</p> : <p>B</p>} </div> );
JavaScript
๋ณต์‚ฌ
โ€ข
X ๊ฐ€ true ์ผ ๋•Œ <p>A</p> ๋ฐ˜ํ™˜
โ€ข
X ๊ฐ€ false, null, undefined, 0, NaN , โ€˜โ€™ ์ผ ๋•Œ <p>B</p> ๋ฐ˜ํ™˜

AND ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž&&

const hasPermission = โ“; const element = ( <div> {hasPermission && <p>Permission granted!</p>} </div> );
JavaScript
๋ณต์‚ฌ
โ€ข
์™ผ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ true ์ผ ๋•Œ, ์˜ค๋ฅธ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž ๋ฐ˜ํ™˜
โ€ข
์™ผ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ false, null, undefined, 0, NaN , โ€˜โ€™ ์ผ ๋•Œ ์ถœ๋ ฅ

OR ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž ||

const isGuest = true; const element = ( <div> {isGuest || <p>Welcome, Guest!</p>} </div> );
JavaScript
๋ณต์‚ฌ
โ€ข
์™ผ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ false, null, undefined, 0, NaN , โ€˜โ€™ ์•„๋‹ ๋•Œ ์™ผ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž ๋ฐ˜ํ™˜
โ€ข
์™ผ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ false, null, undefined, 0, NaN , โ€˜โ€™ ์ผ ๋•Œ ์˜ค๋ฅธ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž ๋ฐ˜ํ™˜

JSX ๋‚ด๋ถ€์˜ ๋ฐ˜๋ณต๋ฌธ

JSX ๋‚ด๋ถ€์—์„œ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š”, ์ฃผ๋กœ ๋ฐฐ์—ด์„ map() ํ•จ์ˆ˜๋กœ ๋ฐ˜๋ณตํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ํ‘œํ˜„์‹ { } ์ž‘์„ฑํ•œ๋‹ค.
JSX ๋‚ด๋ถ€์—์„œ๋Š” for ๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
for ๋ฌธ์„ ๊ผญ ์‚ฌ์šฉ ํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ด์„œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜๋ฐ›๊ณ  ํ‘œํ˜„์‹์œผ๋กœ XML/HTML ์„ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
const numbers = [1, 2, 3, 4, 5]; const listItems = numbers.map((number) => ( <li key={number.toString()}>{number}</li> )); const element = ( <div> <h2>Number List</h2> <ul>{listItems}</ul> </div> );
JavaScript
๋ณต์‚ฌ
์œ„์˜ ์ฝ”๋“œ์—์„œ map() ํ•จ์ˆ˜๋Š” numbers ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ƒˆ๋กœ์šด <li> ์š”์†Œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ listItems ๋ฐฐ์—ด์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด listItems ๋ฐฐ์—ด์„ JSX ๋‚ด์—์„œ {} ์ค‘๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ์„œ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.
๋ฐ˜๋ณต๋˜๋Š” ์š”์†Œ๋“ค์—๋Š” ๊ณ ์œ ํ•œ key ์†์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ React๊ฐ€ ๊ฐ ์š”์†Œ๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š”๋ฐ, ๋ณดํ†ต ๊ฐ ํ•ญ๋ชฉ์˜ ๊ณ ์œ ํ•œ ์‹๋ณ„์ž๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์œ„์˜ ์ฝ”๋“œ์—์„œ๋Š” key={number.toString()}๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์ˆซ์ž๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๊ณ ์œ ํ•œ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉด์„œ JSX ์š”์†Œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

key ์†์„ฑ

: JSX ์•ˆ์—์„œ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ, ๊ฐ ์—˜๋ฆฌ๋จผํŠธ์— key ์†์„ฑ์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ key ์†์„ฑ์— ๋ฐฐ์—ด์˜ ๊ฐ ํ•ญ๋ชฉ์„ ์‹๋ณ„ํ•˜๋Š” ๊ณ ์œ ํ•œ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
๊ฐ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” key ๊ฐ€ ์žˆ์–ด์•ผ, ์—˜๋ฆฌ๋จผํŠธ ๊ฐ„์— ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฐฐ์—ด์˜ index ๋ฅผ key ์†์„ฑ์˜ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ธ๋ฑ์Šค๋Š” ๋ฐฐ์—ด ๋‚ด์—์„œ์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’์œผ๋กœ, ํ•ญ๋ชฉ์ด ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ์‚ญ์ œ๋  ๋•Œ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ธ๋ฑ์Šค๋ฅผ key๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๊ณ ์œ ์„ฑ์ด ๋ณด์žฅ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
const data = [ { id: 1, name: 'Item 1' }, { id: 2, name: 'Item 2' }, { id: 3, name: 'Item 3' }, ]; const listItems = data.map(item => ( <li key={item.id}>{item.name}</li> ));
JavaScript
๋ณต์‚ฌ
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฐ ํ•ญ๋ชฉ์€ ๊ณ ์œ ํ•œ id๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— React๊ฐ€ ์—˜๋ฆฌ๋จผํŠธ ๊ฐ„์— ๋ณ€ํ™”๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์Šคํƒ€์ผ ์ ์šฉ

1.
์ธ๋ผ์ธ ์Šคํƒ€์ผ ๋ฐฉ์‹
2.
ํด๋ž˜์Šค ์ง€์ • ๋ฐฉ์‹

์ธ๋ผ์ธ ์Šคํƒ€์ผ ๋ฐฉ์‹

์ธ๋ผ์ธ ์Šคํƒ€์ผ์€ HTML ์—˜๋ฆฌ๋จผํŠธ์˜ style ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํƒ€์ผ์„ ์ง์ ‘ ์ •์˜ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์€ ํ•ด๋‹น ์—˜๋ฆฌ๋จผํŠธ์—๋งŒ ์ ์šฉ๋˜๋Š” ์Šคํƒ€์ผ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์–ด ์œ ์—ฐํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํƒ€์ผ์€ JavaScript ๊ฐ์ฒด์˜ ํ˜•ํƒœ๋กœ ์ž‘์„ฑ๋˜๋ฉฐ, ๊ฐ์ฒด์˜ ์†์„ฑ์œผ๋กœ ์Šคํƒ€์ผ ์†์„ฑ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
โ€ข
๋ฌธ๋ฒ•
style={ { ์Šคํƒ€์ผ์†์„ฑ1 : '๊ฐ’', ์Šคํƒ€์ผ์†์„ฑ2 : '๊ฐ’' } }
JavaScript
๋ณต์‚ฌ
โ€ข
style ์†์„ฑ ๋‚ด์— ์ค‘๊ด„ํ˜ธ { } ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JavaScript ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ฐ์ฒด์˜ ์†์„ฑ์œผ๋กœ ์Šคํƒ€์ผ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
โ€ข
๊ฐ์ฒด { } ๋กœ ์ง€์ •ํ•œ ์Šคํƒ€์ผ์„ ํ‘œํ˜„์‹์œผ๋กœ { } ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
โ€ข
CSS ์—์„œ๋Š” ์Šคํƒ€์ผ ์†์„ฑ๋ช…์„ โ€˜-โ€™ ์ผ€๋ฐฅ ์ผ€์ด์Šค(kebab-case)์ž‘์„ฑํ•˜์ง€๋งŒ, JSX ์—์„œ๋Š” ์Šคํƒ€์ผ ์†์„ฑ๋ช…์„ ์นด๋ฉœ ์ผ€์ด์Šค(CamelCase)๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
const element = ( <div style={{ color: 'blue', fontSize: '16px', backgroundColor: 'lightgray' }}> This is a text with inline styles. </div> );
JavaScript
๋ณต์‚ฌ

ํด๋ž˜์Šค ์ง€์ • ๋ฐฉ์‹

ํด๋ž˜์Šค ์ง€์ • ๋ฐฉ์‹์€ CSS ํด๋ž˜์Šค๋ฅผ ๋ฏธ๋ฆฌ ์ •์˜ํ•˜๊ณ , ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ HTML ์—˜๋ฆฌ๋จผํŠธ์— ์ ์šฉํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์€ ์—ฌ๋Ÿฌ ์—˜๋ฆฌ๋จผํŠธ์— ๋™์ผํ•œ ์Šคํƒ€์ผ์„ ์ ์šฉํ•˜๊ฑฐ๋‚˜, ์ „์—ญ ์Šคํƒ€์ผ ์‹œํŠธ๋ฅผ ํ™œ์šฉํ•  ๋•Œ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.
โ€ข
styles.css
.customClass { color: red; font-size: 18px; background-color: lightyellow; }
CSS
๋ณต์‚ฌ
์Šคํƒ€์ผ ์‹œํŠธ ํŒŒ์ผ์˜ ์ด๋ฆ„์— ๋Œ€ํ•œ ๊ด€์Šต์€ ์ฃผ๊ด€์ ์ด๋ฉฐ, ํ”„๋กœ์ ํŠธ๋‚˜ ํŒ€์˜ ๊ทœ์น™์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ฐ˜์ ์œผ๋กœ React ํ”„๋กœ์ ํŠธ์—์„œ๋Š” styles.css์™€ ๊ฐ™์ด ๋ณต์ˆ˜ํ˜•์œผ๋กœ ๋ช…๋ช…ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.
โ€ข
Test.jsx
// React ์ปดํฌ๋„ŒํŠธ์—์„œ ํด๋ž˜์Šค ์ ์šฉ import React from 'react'; import './styles.css'; const element = ( <div className="customClass"> This is a text with styles applied using a CSS class. </div> );
JavaScript
๋ณต์‚ฌ
JSX์—์„œ๋Š” HTML์˜ class ์†์„ฑ์„ className์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” JavaScript์—์„œ class๋Š” ์˜ˆ์•ฝ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ฃผ์„

JSX ์ฃผ์„์€ JavaScript XML (JSX) ์ฝ”๋“œ ๋‚ด์—์„œ ์ฃผ์„์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. JSX ์ฃผ์„์€ ๋ธŒ๋ผ์šฐ์ €์— ๋ Œ๋”๋ง๋˜์ง€ ์•Š๊ณ , ์†Œ์Šค ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ์ฝ”๋“œ์— ์„ค๋ช…์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
1.
ํ•œ ์ค„ ์ฃผ์„
2.
์—ฌ๋Ÿฌ ์ค„ ์ฃผ์„

ํ•œ ์ค„ ์ฃผ์„

const element = ( <div> {/* ์ด ๋ถ€๋ถ„์€ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋Š” ํ•œ ์ค„ ์ฃผ์„์ž…๋‹ˆ๋‹ค. */} <p>Hello, World!</p> </div> );
JavaScript
๋ณต์‚ฌ
์œ„์˜ ์˜ˆ์ œ์—์„œ {/* ... */}๋Š” ํ•œ ์ค„ ์ฃผ์„์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์ด ๋ถ€๋ถ„์€ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ์ค„ ์ฃผ์„

const element = ( <div> {/* ์—ฌ๋Ÿฌ ์ค„ ์ฃผ์„์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์ค„๋กœ ์ฃผ์„์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. */} <p>Hello, World!</p> </div> );
JavaScript
๋ณต์‚ฌ
์—ฌ๋Ÿฌ ์ค„ ์ฃผ์„์€ {/* ... */} ์•ˆ์— ์—ฌ๋Ÿฌ ์ค„์˜ ์ฃผ์„์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
JSX ์ฃผ์„์€ React ์—˜๋ฆฌ๋จผํŠธ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ปดํŒŒ์ผ๋˜๋ฉด ๋ธŒ๋ผ์šฐ์ €์—๋Š” ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฃผ์„์€ ์ฃผ๋กœ ์ฝ”๋“œ์˜ ํŠน์ • ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์„ค๋ช…์ด๋‚˜, ์ž„์‹œ์ ์ธ ์ฝ”๋“œ ๋น„ํ™œ์„ฑํ™” ๋“ฑ์˜ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.