[React] ๊ธฐ์ดˆ

hosik kimยท2021๋…„ 10์›” 6์ผ
0

With CodeStates

๋ชฉ๋ก ๋ณด๊ธฐ
38/45
post-thumbnail

๐Ÿ’กWhat is React??

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

โœ…๋ฆฌ์•กํŠธ์˜ 3๊ฐ€์ง€ ํŠน์ง•

  1. ๋ฆฌ์•กํŠธ๋Š” ์„ ์–ธํ˜•์ด๊ณ 
  2. ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์ด๋ฉฐ
  3. ๋‹ค์–‘ํ•œ ๊ณณ์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.(๋ฒ”์šฉ์„ฑ์ด ๋›ฐ์–ด๋‚˜๋‹ค)

์„ ์–ธํ˜•(Declarative)

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

์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜(Component-Based)

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

๋ฒ”์šฉ์„ฑ(Learn Once, Write Anywhere)

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

๐Ÿ’กJSX

- JavaScript๋ฅผ ํ™•์žฅํ•œ ๋ฌธ๋ฒ•์ด๋‹ค.

JSX๋ž€?

  • JavaScript XML์˜ ์ค„์ž„๋ง๋กœ ๋ฌธ์ž์—ด๋„ ์•„๋‹ˆ๊ณ  HTML๋„ ์•„๋‹ˆ๋‹ค
  • React์—์„œ UI๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ๋ฒ•์œผ๋กœ JavaScript๋ฅผ ํ™•์žฅํ•œ ๋ฌธ๋ฒ•์ด๋‹ค.
  • JSX๋Š” JavaScript๊ฐ€ ํ™•์žฅ๋œ ๋ฌธ๋ฒ•์ด์ง€๋งŒ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฐ”๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” JavaScript์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” JavaScript์ฝ”๋“œ๋กœ ๋ณ€ํ™˜์„ ํ•ด์ฃผ์–ด์•ผ ํ•˜๋ฉฐ, ์ด ๋•Œ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด "Babel"์ด๋‹ค.

๐Ÿ” Babel์ด๋ž€?

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

DOM & React JSX

  • Reactdptjsms DOM๊ณผ ๋‹ค๋ฅด๊ฒŒ CSS, JSX ๋ฌธ๋ฒ•๋งŒ์„ ๊ฐ€์ง€๊ณ  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ฆ‰, ์ปดํฌ๋„ŒํŠธ ํ•˜๋‚˜๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•„์š”ํ•œ ํŒŒ์ผ์ด ์ค„์–ด๋“ค์–ด, ํ•œ๋ˆˆ์— ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • JSX๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด JavaScript๋งŒ์œผ๋กœ ๋งˆํฌ์—…(markup) ํ˜•ํƒœ์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ DOM์— ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

์™œ JSX๋ฅผ ์จ์•ผํ•˜๋Š”๊ฐ€?

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

โ”JSX์—†์ด React๋ฅผ ์“ธ ์ˆ˜ ์žˆ์„๊นŒ??

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

๐Ÿ’กJSX ํ™œ์šฉ

JSX ๊ทœ์น™

1. ํ•˜๋‚˜์˜ ์—˜๋ฆฌ๋จผํŠธ ์•ˆ์— ๋ชจ๋“  ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ํฌํ•จ
: JSX์—์„œ ์—ฌ๋Ÿฌ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ณ ์žํ•˜๋Š” ๊ฒฝ์šฐ, Opening tagdhk Closing tag๋กœ ๊ฐ์‹ธ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

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

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

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

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

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

๐Ÿ’กComponent

๐Ÿ”Component๋ž€?

  • ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์œ„ํ•œ ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์ฝ”๋“œ ๋ฌถ์Œ์ด๋‹ค.
  • UI๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ํ•„์ˆ˜ ์š”์†Œ์ด๋‹ค.

Component๋กœ ์ƒ๊ฐํ•˜๊ธฐ

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

Component Based ์žฅ์ 

  • ๊ธฐ์กด์—๋Š” ํŠน์ • ์œ„์น˜์˜ ์ˆ˜์ •์„ ์œ„ํ•ด์„œ

    1. HTML๋กœ ๊ตฌ์กฐ๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.
    2. CSS๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.
    3. ๋ณ€๊ฒฝ๋œ ๊ตฌ์กฐ์™€ ๋””์ž์ธ์— ๋งž์ถฐ DOM ์กฐ์ž‘ ๋กœ์ง์„ ์ˆ˜์ •ํ•œ๋‹ค.
  • React๋ฅผ ์ด์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์—ˆ์„ ๊ฒฝ์šฐ์— ํŠน์ • ์œ„์น˜์˜ ์ˆ˜์ •์„ ์œ„ํ•ด์„œ๋Š”

    1. ์›ํ•˜๋Š” ์ˆ˜์ •์‚ฌํ•ญ์— ๋งž์ถ”์–ด ๊ธฐ์กด ์ปดํฌ๋„ŒํŠธ ์œ„์น˜๋งŒ ์ˆ˜์ •ํ•ด์ฃผ๋ฉด๋œ๋‹ค.
profile
์•ˆ๋˜๋ฉด ๋  ๋•Œ๊นŒ์ง€๐Ÿ‘Œ

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