[S2U4] React

๐Ÿ‘ฝยท2024๋…„ 3์›” 8์ผ
0
post-thumbnail

CH1. React

๐Ÿ“Œ React

๐Ÿ”ธ ์›น, ๋ฐ์Šคํฌํƒ‘, ๋ชจ๋ฐ”์ผ ๋“ฑ ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” JavaScript ํ”„๋ก ํŠธ์—”๋“œ ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.

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

๐Ÿ”ธ ์„ ์–ธํ˜•(Declarative) : ์ฝ”๋“œ๋ฅผ ์ž์„ธํžˆ ์ ์–ด๋†“์ง€ ์•Š๊ณ ๋„ ์ฝ”๋“œ์˜ ์˜๋ฏธ๋ฅผ ์•Œ์ˆ˜ ์žˆ๊ฒŒ ์ž‘์„ฑ, HTML/CSS/JS๋ฅผ ๋‚˜๋ˆ ์„œ ์ ๊ธฐ ๋ณด๋‹ค๋Š” ํ•˜๋‚˜์˜ ํŒŒ์ผ์— ๋ช…์‹œ์ ์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ JSX๋ฅผ ํ™œ์šฉํ•œ ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ.
๐Ÿ”ธ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ (Component-Based) : ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์ฝ”๋“œ๋ฅผ ๋ฌถ์–ด๋‘” ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ. ์ปดํฌ๋„ŒํŠธ๋กœ ๋ถ„๋ฆฌํ•˜๋ฉด ์„œ๋กœ ๋…๋ฆฝ์ (์ปดํฌ๋„ŒํŠธ๊ฐ„ ์˜์กด์„ฑ์ด ์ ๊ธฐ ๋•Œ๋ฌธ์— ์œ ๋‹›ํ…Œ์ŠคํŠธ์—๋„ ์šฉ์ด)์ด๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋–„๋ฌธ์— ๊ธฐ๋Šฅ์ž์ฒด์— ์ง‘์ค‘ํ•˜์—ฌ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Œ. ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํŽธํ•จ.
๐Ÿ”ธ ๋ฒ”์šฉ์„ฑ (Learn Once, Write Anywhere) : JS ํ”„๋กœ์ ํŠธ ์–ด๋””์—๋“  ์œ ์—ฐํ•˜๊ฒŒ ์ ์šฉ๋  ์ˆ˜ ์žˆ์Œ. Facebook์—์„œ ๊ด€๋ฆฌ๋˜์–ด ์•ˆ์ •์ ์ด๊ณ  ๊ฐ€์žฅ ์œ ๋ช…ํ•˜๊ณ  ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ๋ชจ๋ฐ”์ผ ๊ฐœ๋ฐœ๋„ ๊ฐ€๋Šฅํ•จ.

๐Ÿ“Œ JSX (JavaScript XML)

๐Ÿ”ธ React์—์„œ UI๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ๋ฒ•์œผ๋กœ JavaScript๋ฅผ ํ™•์žฅํ•œ ๋ฌธ๋ฒ•.
๐Ÿ”ธ JavaScript๊ฐ€ ํ™•์žฅ๋œ ๋ฌธ๋ฒ•์ด์ง€๋งŒ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฐ”๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” JavaScript ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” JavaScript ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜์„ ํ•ด์ฃผ์–ด์•ผ ํ•จ.
๐Ÿ”ธ Babel : JSX๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” JavaScript๋กœ ์ปดํŒŒ์ผ. ์ปดํŒŒ์ผ ํ›„, JavaScript๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฝ๊ณ  ํ™”๋ฉด์— ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ์Œ.
๐Ÿ”ธ DOM๊ณผ ๋‹ค๋ฅด๊ฒŒ CSS, JSX ๋ฌธ๋ฒ•๋งŒ์„ ๊ฐ€์ง€๊ณ  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Œ.

DOM = JS + HTML + CSS
React DOM = JSX + CSS

JSX ํ™œ์šฉ

๐Ÿ”ธ ํ•˜๋‚˜์˜ ์—˜๋ฆฌ๋จผํŠธ ์•ˆ์— ๋ชจ๋“  ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•จ.

<opening tag>
  <... />
  <... />
</closing tag>

๐Ÿ”ธ ์—˜๋ฆฌ๋จผํŠธ ํด๋ž˜์Šค ์‚ฌ์šฉ ์‹œ, className์œผ๋กœ ํ‘œ๊ธฐ (๋งŒ์•ฝ class๋กœ ์ž‘์„ฑ ์‹œ, React์—์„œ๋Š” ์ด๋ฅผ html ํด๋ž˜์Šค ์†์„ฑ ๋Œ€์‹  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค๋กœ ๋ฐ›์•„ ๋“ค์ž„).

<div className="..."></div>

๐Ÿ”ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œํ˜„์‹ ์‚ฌ์šฉ ์‹œ, ์ค‘๊ด„ํ˜ธ{} ์‚ฌ์šฉ (์ค‘๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ์ธ์‹).

๐Ÿ”ธ ์‚ฌ์šฉ์ž ์ •์˜ ์ปดํฌ๋„ŒํŠธ๋Š” ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ (์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜๋ฉด HTML ์—˜๋ฆฌ๋จผํŠธ๋กœ ์ธ์‹์„ ํ•จ)

๐Ÿ”ธ ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง์—๋Š” ์‚ผํ•ญ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ (if ๋ฌธ์˜ return์œผ๋กœ๋Š” ๋ณ€์ˆ˜์— ํ• ๋‹น ๋ถˆ๊ฐ€)

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

  • map() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ key JSX ์†์„ฑ์„ ๋„ฃ์–ด์•ผ ํ•จ.
  • key๋Š” React๊ฐ€ ์–ด๋–ค ํ•ญ๋ชฉ์„ ๋ณ€๊ฒฝ, ์ถ”๊ฐ€ ๋˜๋Š” ์‚ญ์ œํ• ์ง€ ์‹๋ณ„ํ•˜๋Š” ๊ฒƒ์„ ๋„์›€
  • key๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์ง€๋Š” ๊ณ ์œ ํ•œ id ๊ฐ’(์‹๋ณ„์ž)์„ ํ™œ์šฉ.
  • ๊ณ ์œ ํ•œ id๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋งŒ ๋ฐฐ์—ด ์ธ๋ฑ์Šค๋ฅผ ๋„ฃ์Œ(์ด๋Š” ์ตœํ›„์˜ ์ˆ˜๋‹จ์ž„).

    ๐Ÿ’ก key ๊ฐ’์€ ๋ฐ˜๋“œ์‹œ ๋ณ€ํ•˜์ง€ ์•Š๊ณ , ์˜ˆ์ƒ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์œ ์ผํ•ด์•ผ ํ•จ.
    ๋งŒ์ผ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด, ๋งŽ์€ ์ปดํฌ๋„ŒํŠธ ์ธ์Šคํ„ด์Šค์™€ DOM ๋…ธ๋“œ๋ฅผ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์žฌ์ƒ์„ฑํ•˜์—ฌ ์„ฑ๋Šฅ์ด ๋‚˜๋น ์ง€๊ฑฐ๋‚˜ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์˜ state๊ฐ€ ์œ ์‹ค๋  ์ˆ˜ ์žˆ์Œ

๐Ÿ“Œ Component

๐Ÿ”ธ ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์œ„ํ•œ ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์ฝ”๋“œ ๋ฌถ์Œ. UI๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ํ•„์ˆ˜ ์š”์†Œ. JavaScript ํด๋ž˜์Šค๋กœ ์ •์˜๋œ React ๊ตฌ์„ฑ ์š”์†Œ์˜ ๊ธฐ๋ณธ ํด๋ž˜์Šค

๐Ÿ”ธ ๋ชจ๋“  ๋ฆฌ์•กํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ตœ์†Œ ํ•œ ๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ์ด ์ปดํฌ๋„ŒํŠธ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ๊ทผ์›(root)์ด ๋˜๋Š” ์—ญํ• ์„ ํ•จ.
๐Ÿ”ธ ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๋Š” ๊ทผ์›์˜ ์—ญํ• ์„ ํ•˜๋ฏ€๋กœ ๋‹ค๋ฅธ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ. ์ด ๊ณ„์ธต์  ๊ตฌ์กฐ(hierarchy)๋ฅผ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ํ˜•์ƒํ™”ํ•  ์ˆ˜ ์žˆ์Œ.

CH2. Create React App

๐Ÿ”ธ ๋ฆฌ์•กํŠธ SPA(single page aplication)๋ฅผ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ง„ ํˆด ์ฒด์ธ
๐Ÿ”ธ react-dom : react๋ฅผ ๋ธŒ๋ผ์šฐ์ €๋”์— ์‹ค์ œ๋กœ ๋žœ๋”๋งํ• ์ˆ˜ ์žˆ๋”๋ก ๋„์™€์คŒ
๐Ÿ”ธ react-scripts : SPA ๊ตฌํ˜„๊ณผ ๋ณต์žกํ•œ ๋ชจ๋˜ ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ์ˆ  ์„ธํŒ…์ด ๋ฏธ๋ฆฌ ์ค€๋น„ ๋˜์–ด์žˆ์Œ.
๐Ÿ”ธ npx create-react-app ํŒŒ์ผ๋ช… : React ์•ฑ ์ƒ์„ฑ.
๐Ÿ”ธ react-scripts start : package.json ํŒŒ์ผ์˜ scripts - start:์— ์žˆ๋Š” ๋ช…๋ น์–ด๋กœ, npm run start์™€ ๋™์ผ. ํ„ฐ๋ฏธ๋„์— ์ž…๋ ฅ์‹œ React ์•ฑ ์‹คํ–‰.

JSX ๊ณต์‹๋ฌธ์„œ

profile
์ฝ”๋ฆฐ์ด๐Ÿ‘ฝ

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