roqkf

[React] React & JSX ๋ณธ๋ฌธ

๐Ÿ’ป Development/React

[React] React & JSX

ahyeon7 2022. 11. 27. 01:36

React

  • ํ”„๋ก ํŠธ์•ค๋“œ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ JavaScript ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

React์˜ 3๊ฐ€์ง€ ํŠน์ง•

  1. ์„ ์–ธํ˜•

๋ฆฌ์•กํŠธ๋Š” ํ•œ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด HTML/ CSS/ JS๋กœ ๋‚˜๋ˆ ์„œ ์ ๊ธฐ๋ณด๋‹ค๋Š” ํ•˜๋‚˜์˜ ํŒŒ์ผ์— ๋ช…์‹œ์ ์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ JSX๋ฅผ ํ™œ์šฉํ•œ ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€ํ–ฅํ•œ๋‹ค ๋ช…์‹œ์ ์ด์ ์ด๋ผ๋Š” ๊ฒƒ์€ ์ฝ”๋“œ๋ฅผ ์ž์„ธํžˆ ๋ถ„์„ํ•˜์ง€ ์•Š์•„๋„ ์ฝ”๋“œ์˜ ์ผ๋ถ€๋ฅผ ๋ถ„๋ช…ํžˆ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค.

  1. ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜

๋ฆฌ์•กํŠธ๋Š” ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์ฝ”๋“œ๋ฅผ ๋ฌถ์–ด๋‘” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ/ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌํ•˜๋ฉด ์„œ๋กœ ๋…๋ฆฝ์ ์ด๊ณ  ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ธฐ๋Šฅ ์ž์ฒด์— ์ง‘์ค‘ํ•˜์—ฌ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค

  1. ๋ฒ”์šฉ์„ฑ

๋ฆฌ์•กํŠธ๋Š” JavaScript ํ”„๋กœ์ ํŠธ ์–ด๋””์—๋“  ์œ ์—ฐํ•˜๊ฒŒ ์ ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. Facebook์—์„œ ๊ด€๋ฆฌ๋ผ ์•ˆ์ •์ ์ด๊ณ , ๊ฐ€์žฅ ์œ ๋ช…ํ•˜๋ฉฐ, ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ๋ชจ๋ฐ”์ผ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅ/ ํ”„๋ผ์ž„์›Œํฌ๋Š” ์ƒํƒœ๊ณ„์— ์กด์†ํ•˜๋ฉฐ, ๋ฆฌ์•กํŠธ๋Š” ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์—๋„ ์œ ์—ฐํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค


JSX

JavaScript XML์˜ ์ค„์ž„๋ง๋กœ, ๋ฌธ์ž์—ด๋„ ์•„๋‹ˆ๊ณ  HTML๋„ ์•„๋‹Œ React์—์„œ UI๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ๋ฒ•์œผ๋กœ JavaScript๋ฅผ ํ™•์žฅํ•œ ๋ฌธ๋ฒ•! / ๋ฌธ๋ฒ•์„ ์ด์šฉํ•˜์—ฌ React ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

๐ŸŸฃ JSX๋Š” JS์˜ ํ™•์žฅ๋œ ๋ฌธ๋ฒ•์ด์ง€๋งŒ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฐ”๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” JS ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋‹ค!

๐ŸŸก ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ฐ”๋กœ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” JS ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ด ์ค˜์•ผ ํ•œ๋‹ค!

๐Ÿ’ฅ ์ด๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ Babel !

๐ŸŸฃ Babel์ด๋ž€?

๐ŸŸก JSX๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” JavaScript๋กœ ์ปดํŒŒ์ผํ•˜๋ฉฐ, ์ปดํŒŒ์ผ ํ›„์— JavaScrip๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฝ๊ณ  ํ™”๋ฉด์— ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ๋‹ค!

๐ŸŸฃ React์—์„œ๋Š” DOM๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ CSS, JSX ๋ฌธ๋ฒ•๋งŒ์„ ๊ฐ€์ง€๊ณ  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค!

๐ŸŸก ์ปดํฌ๋„ŒํŠธ ํ•˜๋‚˜๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•„์š”ํ•œ ํŒŒ์ผ์ด ์ค„์–ด๋“ค์—ˆ์œผ๋ฉฐ, ํ•œ๋ˆˆ์— ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค


๐Ÿ˜† JSX๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด JavaScript๋งŒ์œผ๋กœ ๋งˆํฌ์—… ํ˜•ํƒœ์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์„œ DOM์— ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ!

+ ์ฃผ์˜ํ•  ์ : JSX๋Š” HTML์ฒ˜๋Ÿผ ์ƒ๊ฒผ์ง€๋งŒ HTML์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์—Babel ์„ ์ด์šฉํ•œ ์ปดํŒŒ์ผ ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.

 

DOM์—์„œ JS์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” JS์™€ HTML์„ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค lnline ๋ฐฉ์‹์ด๋‚˜ script ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•ด JS ํŒŒ์ผ์„ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.


ํ•˜์ง€๋งŒ React์—์„œ๋Š” JSX๋ฅผ ์ด์šฉํ•ด์„œ ์œ„์— ๋ณด์•˜๋˜ DOM ์ฝ”๋“œ๋ณด๋‹ค ๋ช…์‹œ์ ์œผ๋กœ ์ฝ”๋“œ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. JS ๋ฌธ๋ฒ•๊ณผ HTML ๋ฌธ๋ฒ•์„ ๋™์‹œ์ ์œผ๋กœ ์ด์šฉํ•ด ๊ธฐ๋Šฅ๊ณผ ๊ตฌ์กฐ๋ฅผ ํ•œ๋ˆˆ์— ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ˜† ์ด๋ ‡๊ฒŒ ๊ตฌ์กฐ์™€ ๋™์ž‘์— ๋Œ€ํ•œ ์ฝ”๋“œ๋ฅผ ํ•œ ๋ญ‰์น˜๋กœ ์ ์€ ์ฝ”๋“œ์…‹์„ ์ปดํฌ๋„ŒํŠธ ๋ผ๊ณ  ํ•œ๋‹ค!

๐Ÿค” JSX ์—†์ด React ์š”์†Œ๋ฅผ ๋งŒ๋“ค ์ˆ˜๋Š” ์—†์„๊นŒ?

  • JSX ์—†์ด๋„ React ์š”์†Œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ, ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•˜๊ณ  ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง„๋‹ค!

DOM์œผ๋กœ ์—˜๋ฆฌ๋จผํŠธ ์ƒ์„ฑํ•˜๊ธฐ ์˜ˆ์ œ

DOM์—์„œ Hello, HTML DOM ์„ ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์œ„์™€ ๊ฐ™์ด HTML๊ณผ JS๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

React ๋กœ ์—˜๋ฆฌ๋จผํŠธ ์ƒ์„ฑํ•˜๊ธฐ ์˜ˆ์ œ


DOM์—์„œ์™€๋Š” ๋‹ฌ๋ฆฌ App.js ์ด ํ•œ ๊ฐœ์˜ JS ํŒŒ์ผ ์•ˆ์—์„œ HTML๊ณผ JS๋กœ ๋‚˜๋ˆ„์–ด์กŒ๋˜ ๋‘ ๊ฐ€์ง€ ์ผ์„ ํ•œ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ๋‹ค. ํ•˜๋‚˜์˜ ํŒŒ์ผ์—์„œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์กฐ์™€ ๋™์ž‘์„ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค. JSX๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋งŒ ๋ฐ”๋ผ๋ณด๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ๊ตฌ์กฐ๋„ ๋ฐ”๋ผ๋ณด๊ฒŒ ๋•๋Š”๋‹ค!!


JSX ํ™œ์šฉ

โ— JSX ๊ทœ์น™

๐Ÿ’จ ํ•˜๋‚˜์˜ ์—˜๋ฆฌ๋จผํŠธ ์•ˆ์— ๋ชจ๋“  ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค!


JSX์—์„œ ์—ฌ๋Ÿฌ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋ ค๊ณ  ํ•  ๋•Œ, ์ตœ์ƒ์œ„์—์„œ opening tag์™€ closing tag๋กœ ๊ฐ์‹ธ์ค˜์•ผ ํ•œ๋‹ค!

๐Ÿ’จ React์—์„œ CSS class ์†์„ฑ์„ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ "className"์œผ๋กœ ํ‘œ๊ธฐํ•ด์•ผ ํ•œ๋‹ค!


๋งŒ์•ฝ์— className ์ด ์•„๋‹Œ class ๋กœ ์ž‘์„ฑํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด React์—์„œ๋Š” html ํด๋ž˜์Šค ์†์„ฑ์ด ์•„๋‹Œ JS ํด๋ž˜์Šค๋กœ ๋ฐ›์•„๋“ค์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค

๐Ÿ’จ JavaScript ํ‘œํ˜„์‹ ์‚ฌ์šฉ ์‹œ, ์ค‘๊ด„ํ˜ธ({})๋ฅผ ์ด์šฉํ•œ๋‹ค!


JSX์—์„œ JavaScript๋ฅผ ์“ฐ๊ณ ์ž ํ•œ๋‹ค๋ฉด, ๊ผญ ์ค‘๊ด„ํ˜ธ๋ฅผ ์ด์šฉํ•ด์•ผ ํ•œ๋‹ค. ์ค‘๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ์ธ์‹ํ•œ๋‹ค!

๐Ÿ’จ ์‚ฌ์šฉ์ž ์ •์˜ ์ปดํฌ๋„ŒํŠธ๋Š” ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•œ๋‹ค!


React ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ JSX๋กœ ์ž‘์„ฑ๋˜๋ฉด ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผ ๋œ๋‹ค. ์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์ผ๋ฐ˜์ ์ธ HTML ์—˜๋ฆฌ๋จผํŠธ๋กœ ์ธ์‹ํ•˜๊ฒŒ ๋จ! ๋Œ€๋ฌธ์ž๋กœ ์ž‘์„ฑ๋œ JSX ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋”ฐ๋กœ ์‚ฌ์šฉ์ž ์ •์˜ ์ปดํฌ๋„ŒํŠธ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

๐Ÿ’จ ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง์—๋Š” ์‚ผํ•ญ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค!


์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง์€ if๋ฌธ์ด ์•„๋‹Œ ์‚ผํ•ญ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค

๐Ÿ’จ ์—ฌ๋Ÿฌ ๊ฐœ์˜ HTML ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ํ‘œ์‹œํ•  ๋•Œ๋Š” map() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค!


React์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ HTML ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ํ‘œ์‹œํ•  ๋•Œ๋Š” map() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. map ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ key JSX ์†์„ฑ์„ ๋„ฃ์–ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ์— key JSX ์†์„ฑ์„ ๋„ฃ์ง€ ์•Š์œผ๋ฉด ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ ํ•ญ๋ชฉ์— key๋ฅผ ๋„ฃ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋œ๋‹ค!

'๐Ÿ’ป Development > React' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[React] React์—์„œ์˜ State ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ  (1) 2022.11.30
[React] React State & Props  (0) 2022.11.30
[React] React Router  (0) 2022.11.30
[React] SPA  (0) 2022.11.30
[React] key JSX ์†์„ฑ์ด ํ•„์š”ํ•œ ์ด์œ   (0) 2022.11.27