Lieto: React ๊ธฐ์ดˆ์žก๊ธฐ ๐Ÿง—

๋ฐ•์ƒํ•˜ยท2024๋…„ 1์›” 10์ผ
1

Lieto

๋ชฉ๋ก ๋ณด๊ธฐ
1/9
post-thumbnail

React ๊ธฐ์ดˆ ๋‹ค์‹œ ์žก์•„๋ณด์ž ๐ŸŽฏ

React๋ฅผ ์˜ค๋žœ๋งŒ์— ์‚ฌ์šฉ์„ ํ•˜๋ฉด์„œ (์•ฝ 7๊ฐœ์›” ์ „ ์‚ฌ์šฉ..) ๊ทธ๊ฐ„ ์žŠ๊ณ ์žˆ๋˜ React์— ๋Œ€ํ•œ ๊ฐœ๋…๋“ค์„ ๋‹ค์‹œ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด์•„์•ผ๊ฒ ๋‹ค.

Lieto Project๋ฅผ ์‹œ์ž‘ํ•˜๋ฉฐ ๊ฐ„๋‹จํ•œ API(kakao api)๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š”๋ฐ ๋ญ”๊ฐ€ ์–ด๋–ป๊ฒŒ ์ปดํฌ๋„ŒํŠธ์— ๋ฐ˜์˜์„ ํ•ด์•ผํ• ์ง€ React์˜ ์ข‹์€ ์ ์ด ๋ญ์˜€๋Š”์ง€๋ฅผ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ž‘์„ฑํ•ด๋ณด๋ฉฐ Project๋ฅผ ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ ํ•ด๋ณด์ž ๐Ÿง

JSX ๐ŸŽฏ

JSX๋Š” Html+js ๋ฌธ๋ฒ•!
Javascript Syntex eXtension

๊ฒฐ๊ตญ Javascript๋ฌธ๋ฒ•์„ ํ™•์žฅํ•œ ๋ฌธ๋ฒ•์ด๋‹ค.

์šฐ๋ฆฌ๊ฐ€ JS๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” html๋”ฐ๋กœ Javascript ๋”ฐ๋กœ ๊ด€๋ฆฌ๋ฅผ ํ•˜๋‹ค๋ณด๋‹ˆ ๊ฐœ๋ฐœํ•˜๋Š” ์ž…์žฅ์—์„œ๋„ ๋ถˆํŽธ๊ฐ์ด ์žˆ์—ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ JSX๋ฌธ๋ฒ•์€ Html ํƒœ๊ทธ๋ฅผ Returnํ•˜๊ณ  ๊ทธ ์œ„์— Javascript ์ฝ”๋“œ๋ฅผ ์ž…ํ˜€์ค„ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ƒฅ Javascript+html์ด ๊ฐ€๋Šฅํ•œ ๋ฌธ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๋‹ค.

JavaScript๋Š” ๋ช…๋ นํ˜•, React๋Š” ์„ ์–ธํ˜• ๐ŸŽฏ

์šฐ๋ฆฌ๊ฐ€ event๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ console์— "Hello"๋ฅผ ์ฐ๋Š” ๊ณผ์ •์„ ๊ฐ ๋‹ค๋ฅธ ๋ฌธ๋ฒ• (VanillaJS, JSX)์œผ๋กœ ๋น„๊ตํ•ด๋ณด์ž

JavaSript ๐ŸŸก

//html
 <body>    
    <div>
   <form>
   <button>hi</button>
   </form>
   </div>
  </body>

//js
const BTN = document.querySeletor("button")
BTN.addEventListener((e)=>console.log("Hello"))

๋‹ค์Œ๊ณผ ๊ฐ™์ด VanillaJS๋Š” ํ•ด๋‹น ๊ณผ์ •์„ ๋ชจ๋‘ ๋ช…๋ นํ˜•์œผ๋กœ ์ž‘์„ฑ์„ ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.
๊ทธ๋ ‡๋‹ค๋ณด๋‹ˆ ์ฝ”๋“œ๊ฐ€ ๋น„๊ต์  ๊ธธ๊ณ  ํ•œ๋ˆˆ์— ์–ด๋–ค button์„ ๋ˆŒ๋ €์„ ๋•Œ์ธ์ง€ ๋ณด๊ธฐ ํž˜๋“  ๋ถ€๋ถ„์ด ์žˆ๋‹ค.

React๋Š” ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„์„ ์„ ์–ธํ˜•์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒํ•ด์ค€๋‹ค.


return <div>
  <form>
    <button onClick={()=>console.log("Hello")}></button>
  </form>
  </div>

์ด๋ ‡๊ฒŒ ์ปดํฌ๋„ŒํŠธํ•จ์ˆ˜ ์œ„์— ๋ฐ”๋กœ ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, ์„ ์–ธ์ ์œผ๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ์›ํ•˜๋Š” ๋™์ž‘์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

์ข‹์€์ 
1. ์–ด๋–ค ์ปดํฌ๋„ŒํŠธ์— ์–ด๋–ค ๊ธฐ๋Šฅ์ด ์žˆ๋Š”์ง€ ํ•œ๋ˆˆ์— ๋ณผ ์ˆ˜ ์žˆ๋‹ค.(๊ฐ€๋…์„ฑ์ฆ๊ฐ€)
2. ์˜๋„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
3. ๊ฐœ๋ฐœ์ž๊ฐ€ ์ณ์•ผํ•˜๋Š” ์ฝ”๋“œ์˜ ๊ธธ์ด๊ฐ€ ์ค„์–ด๋“ ๋‹ค.

์ฆ‰, React ์˜ JSX๋Š” ์œ„์™€ ๊ฐ™์€ ์žฅ์ ์„ ๊ฐ€์ง„ ๊ฒƒ์ด๋‹ค!

๊ทธ๋Ÿผ JSX๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‚˜? ๐ŸŽฏ

๊ฒฐ๋ก ์€ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค.

๋ธŒ๋ผ์šฐ์ €๋Š” Javascript ์ฝ”๋“œ๋ฅผ ์ฝ์„ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ JSX๋ฌธ๋ฒ•์„ ๋”ฐ๋กœ ์ฝ์–ด์ฃผ์ง€ ๋ชปํ•œ๋‹ค.
๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Babel ์ด๋ผ๋Š” ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ๊ฐ€ ๊ด€์—ฌํ•ด js์ฝ”๋“œ๋กœ ๋ณ€ํ™˜์‹œ์ผœ์ค€๋‹ค!

Babel์€ ReactํŒŒ์ผ์„ build ํ•˜๋ฉด์„œ ๊ด€์—ฌํ•˜๊ฒŒ ๋œ๋‹ค.

  1. ์ฝ”๋“œ ๋ฒˆ๋“ค๋ง: JavaScript ์ฝ”๋“œ๋Š” ์—ฌ๋Ÿฌ ํŒŒ์ผ๋กœ ๋‚˜๋‰˜์–ด ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค์—์„œ๋Š” ์ด๋ฅผ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ๋ฒˆ๋“ค๋งํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ๋Š” ์ฃผ๋กœ webpack์ด๋‚˜ Parcel๊ณผ ๊ฐ™์€ ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋Ÿฌ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  2. JSX๋ฅผ JavaScript๋กœ ๋ณ€ํ™˜: React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ๋œ JSX ์ฝ”๋“œ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง์ ‘ ํ•ด์„ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, Babel๊ณผ ๊ฐ™์€ ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JSX๋ฅผ ์ผ๋ฐ˜ JavaScript ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  3. CSS, ์Šคํƒ€์ผ ์ฒ˜๋ฆฌ: ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ๋œ ์Šคํƒ€์ผ ์‹œํŠธ๋“ค์€ ํ•˜๋‚˜์˜ CSS ํŒŒ์ผ๋กœ ๋ฒˆ๋“ค๋ง๋˜๊ฑฐ๋‚˜ ํ•„์š”์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ CSS ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ๋“ค์€ ๋นŒ๋“œ ๊ณผ์ •์—์„œ ์ƒ์„ฑ๋˜์–ด HTML ํŒŒ์ผ๊ณผ ํ•จ๊ป˜ ๋กœ๋“œ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  4. ์ •์  ์ž์› ๋ณต์‚ฌ: ํ”„๋กœ์ ํŠธ์— ์‚ฌ์šฉ๋œ ์ด๋ฏธ์ง€, ํฐํŠธ ๋“ฑ์˜ ์ •์  ์ž์› ํŒŒ์ผ์€ ๋นŒ๋“œ ๊ณผ์ •์—์„œ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋ณต์‚ฌ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ์— ํ•จ๊ป˜ ํฌํ•จ๋˜์–ด ์„œ๋ฒ„์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ˜ธ์ŠคํŒ…ํ•  ๋•Œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  5. HTML ์ƒ์„ฑ: React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ง„์ž…์ ์ด ๋˜๋Š” HTML ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด HTML ํŒŒ์ผ์—๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋กœ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ์™€ ๋งํฌ ํƒœ๊ทธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  6. ์ตœ์ ํ™” ๋ฐ ์••์ถ•: ์ƒ์„ฑ๋œ JavaScript ๋ฐ CSS ํŒŒ์ผ์€ ์ฃผ๋กœ ์ตœ์ ํ™” ๋ฐ ์••์ถ• ๊ณผ์ •์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ์˜ ํฌ๊ธฐ๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ  ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  7. ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ ์ƒ์„ฑ: ์œ„์˜ ๋ชจ๋“  ๊ณผ์ •์ด ์™„๋ฃŒ๋˜๋ฉด, ์ตœ์ข…์ ์œผ๋กœ ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฐ๊ณผ๋ฌผ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„œ๋ฒ„์— ๋ฐฐํฌํ•˜๊ณ  ํ˜ธ์ŠคํŒ…ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ํ†ตํ•ด React๋Š” ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ์„ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋Š”๋ฐ 2๋ฒˆ์„ ๋ณด๋ฉด JSX๊ฐ€ Javascript๋กœ ๋ณ€ํ™˜๋˜๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

React์˜ ํ•จ์ˆ˜ ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ด์œ ๋Š” JSX ๐ŸŽฏ

React์˜ ํ•จ์ˆ˜๋ฅผ ์†Œ๋ฌธ์ž๋กœ ๋งŒ๋“  ํ›„ ์ปค์Šคํ…€์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“  ํ›„ html์ฝ”๋“œ ์‚ฌ์ด์— ๋„ฃ์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
์™œ ๊ทธ๋Ÿด๊นŒ??

//customButton.js
const customButton =()=>{
 return <div>
   <button></button>
   </div> 
}
// main.js
return 
<div>
  <h1>Title</h1>
<customButton/>
  </div>
// ์˜ค๋ฅ˜๋ฐœ์ƒ!

๊ทธ๊ฑด ๋ฐ”๋กœ JSX๋ฅผ ํŠธ๋žœ์ŠคํŒŒ์ผ๋งํ•˜๋Š” ๊ณผ์ •์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋จผ์ € Babel์„ ํ†ตํ•ด JSX => JavaScript๋กœ ๋ณ€ํ™˜๋ ๋•Œ ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” ํ•จ์ˆ˜๋Š”
React.createElement() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ปดํฌ๋„ŒํŠธ๋กœ ์ทจ๊ธ‰๋˜๊ณ ,
์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ด๋ฆ„์€ ์ผ๋ฐ˜ HTML ํƒœ๊ทธ๋กœ ์ทจ๊ธ‰๋œ๋‹ค.

์‚ฌ์‹ค htmlํƒœ๊ทธ๋Š” ๋ชจ๋‘ ์•ž์ด ์†Œ๋ฌธ์ž์ธ๋ฐ

์ปดํฌ๋„ŒํŠธ๋ฅผ Returnํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค๊ณ ํ–ˆ์„๋•Œ ์ด๊ฒŒ ์†Œ๋ฌธ์ž๋ผ๋ฉด? ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ด๋ฆ„์ด title์ด๋ผ๋ฉด?
Babel์€ ์ปค์Šคํ…€๋œ title๊ณผ htmlํƒœ๊ทธ์˜ title์„ ๊ตฌ๋ถ„ํ•  ๋ฐฉ๋ฒ•์ด ์—†๋‹ค.

๊ทธ๋ž˜์„œ ๋ฆฌ์•กํŠธ์—์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜๋Š” ๋Œ€๋ฌธ์ž๋กœ ์ž‘์„ฑํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค!

์‰ฝ๊ฒŒ๋งํ•ด์„œ htmlํƒœ๊ทธ๋ž‘ ๊ฒน์น˜๋‹ˆ๊นŒ Jsx๋Š” ๋Œ€๋ฌธ์ž๋กœ ์„ ์–ธํ•ด๋ผ~

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด