[์ฝ”๋”ฉ์• ํ”Œ๐ŸŽ] React ๋ฆฌ์•กํŠธ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ๊นŒ์ง€! - Part 1 ์š”์•ฝ๐Ÿ’ฌ

Jindolยท2021๋…„ 7์›” 1์ผ
0
post-thumbnail

๋ฆฌ์•กํŠธ ๊ณต๋ถ€๋ฅผ ์–ด๋–ป๊ฒŒ ์‹œ์ž‘ํ•ด์•ผ ํ• ์ง€ ๊ณ ๋ฏผํ•˜๋Š” ๋ถ„๋“ค์—๊ฒŒ ์ถ”์ฒœํ•˜๊ณ  ์‹ถ์€ ๊ฐ•์˜์ด๋‹ค.
๋งˆ๋ƒฅ ์–ด๋ ค์›Œ ๋ณด์ด๋˜ ๋ฆฌ์•กํŠธ๋ฅผ ์‹ค์Šต๊ณผ ํ•จ๊ป˜ํ•˜๋‹ˆ ์‰ฝ๊ฒŒ ์ดํ•ด๊ฐ€ ๋˜๊ณ , ๊ฐ•์˜ ํ•œ ๊ฐœ๋‹น ์‹œ๊ฐ„์ด
์งง์•„์„œ ๊ธˆ๋ฐฉ ์™„๊ฐ•ํ•  ๊ฒƒ ๊ฐ™๋‹ค. ์•„๋ฌดํŠผ, ์งง์•„๋„ ๊ฐ•์˜๋งˆ๋‹ค ํ•ต์‹ฌ ๋‚ด์šฉ์ด ์žˆ๊ธฐ์— ์ ์–ด๋†“์€
์š”์•ฝ๋ณธ์„ ๋ธ”๋กœ๊ทธ์— ๋‚จ๊ฒจ๋ณด๋ ค ํ•œ๋‹ค!

  • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์…‹ํŒ… ํ›„(nodejs ์ตœ์‹ ๋ฒ„์ „, VS Code ์—๋””ํ„ฐ ์„ค์น˜ ํ›„ create-react-app ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ) ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ํด๋”๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์œ„์˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ํŒŒ์ผ ๊ตฌ์กฐ๊ฐ€ ๋˜์–ด์žˆ์Œ
    1) App.js : ๋ฉ”์ธํŽ˜์ด์ง€์— ๋“ค์–ด๊ฐˆ HTML ์งœ๋Š” ๊ณณ
    2) index.html : ์‹ค์ œ ๋ Œ๋”๋ง๋˜๋Š” ํŒŒ์ผ
    3) index.js : App.js์˜ ๋ชจ๋“  ๋‚ด์šฉ์„ index.html์— ๋„ฃ์„ ์ˆ˜ ์žˆ๊ฒŒ ๋•๋Š” ์—ญํ• 

  • ๊ทธ ์™ธ,
    1) node-modules : ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชจ์Œ ํด๋”
    2) public : static ํŒŒ์ผ ๋ณด๊ด€ํ•จ
    3) src : ์†Œ์Šค์ฝ”๋“œ ๋ณด๊ด€ํ•จ
    4) package.json : ์„ค์น˜ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชฉ๋ก


[ HTML์ฒ˜๋Ÿผ ์ƒ๊ธด JSX ]

  1. ํƒœ๊ทธ์— class๋ฅผ ์ฃผ๊ณ ์‹ถ์œผ๋ฉด?
  2. ๋ฆฌ์•กํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฐ”์ธ๋”ฉ ์‰ฝ๊ฒŒํ•˜๋Š” ๋ฒ•
    ย  - src, id, href๋“ฑ์˜ ์†์„ฑ์—๋„ ๊ฐ€๋Šฅ
    ย  - ์ƒ์ƒํ•˜๋Š” ๋ชจ๋“  ๊ณณ์— {}๋กœ ๋ณ€์ˆ˜ ์ง‘์–ด๋„ฃ๊ธฐ ๊ฐ€๋Šฅ

  3. JSX์—์„œ style ์†์„ฑ์„ ์ง‘์–ด๋„ฃ์„ ๋•Œ
    ย  - camelCase ์ž‘๋ช… ๊ด€์Šต์— ๋”ฐ๋ผ ์†์„ฑ ๋ฐ”๊ฟ”์ค˜์•ผ ํ•จ

[ ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋ณ€์ˆ˜ ๋ง๊ณ  ๋ฆฌ์•กํŠธ state๋กœ ๋งŒ๋“ค๊ธฐ ]

  • ๋ฐ์ดํ„ฐ๋Š” 1. ๋ณ€์ˆ˜์— ๋„ฃ๊ฑฐ๋‚˜ / 2. state์— ๋„ฃ๊ฑฐ๋‚˜

  • ๋ฆฌ์•กํŠธ์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ๊ณต๊ฐ„ state ๋งŒ๋“œ๋Š” ๋ฒ•
    1. import{ useState } from 'react' ์ƒ๋‹จ์— ์ถ”๊ฐ€
    2. useState(๋ฐ์ดํ„ฐ)

ย ย  - (์ฐธ๊ณ ) ES6 destructuring ๋ฌธ๋ฒ• : array, object์— ์žˆ๋˜ ์ž๋ฃŒ๋ฅผ ๋ณ€์ˆ˜์— ์‰ฝ๊ฒŒ ๋‹ด๊ณ  ์‹ถ์„ ๋•Œ

  • (๊ฒฐ๋ก ) state๋Š”,
    1. ๋ณ€์ˆ˜ ๋Œ€์‹  ์“ฐ๋Š” ๋ฐ์ดํ„ฐ ์ €์žฅ๊ณต๊ฐ„
    2. useState()๋ฅผ ์ด์šฉํ•ด ๋งŒ๋“ค์–ด์•ผ ํ•จ
    3. ๋ฌธ์ž, ์ˆซ์ž, array, object ๋‹ค ์ €์žฅ๊ฐ€๋Šฅ

  • state์— ๋ฐ์ดํ„ฐ ์ €์žฅํ•ด๋†“๋Š” ์ด์œ  : ์›น์ด App์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์‹ถ์–ด์„œ
    -> state๋Š” ๋ณ€๊ฒฝ๋˜๋ฉด HTML์ด ์ž๋™์œผ๋กœ ์žฌ๋ Œ๋”๋ง์ด ๋จ
    ย ย ย ย ย ex) ์ œ๋ชฉ ์ •๋ ฌ, ์ œ๋ชฉ ์ˆ˜์ •...
    ย ย ย ย (์ƒˆ๋กœ๊ณ ์นจ ์—†์ด๋„ HTML์ด ์žฌ๋ Œ๋”๋ง ๋จ)

  • ์ž์ฃผ ๋ฐ”๋€Œ๋Š”, ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋ณ€์ˆ˜X -> state๋กœ ์ €์žฅํ•ด์„œ ์“ฐ๊ธฐ


[ ๋ฒ„ํŠผ์— ๊ธฐ๋Šฅ๊ฐœ๋ฐœ์„ ํ•ด๋ณด๊ธฐ / ๋ฆฌ์•กํŠธ state ๋ณ€๊ฒฝ ๋ฐฉ๋ฒ• ]

  • ๋ฆฌ์•กํŠธ onClick

    - ํŠน์ด์‚ฌํ•ญ
    1) Click์ด ๋Œ€๋ฌธ์ž
    2) {} ์ค‘๊ด„ํ˜ธ ์‚ฌ์šฉ
    3) ๊ทธ๋ƒฅ ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ ํ•จ์ˆ˜๋ฅผ ์ ์Œ

  • state ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ๋ณดํ†ต ์•„๋ž˜์˜ ํŒจํ„ด์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งฌ
    1. ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์€ state์˜ deep/shallow ์นดํ”ผ๋ณธ์„ ํ•˜๋‚˜ ์ƒ์„ฑํ•จ
    2. ์นดํ”ผ๋ณธ์„ ์ž…๋ง›์— ๋งž๊ฒŒ ์ˆ˜์ •
    3. ์นดํ”ผ๋ณธ์„ state๋ณ€๊ฒฝํ•จ์ˆ˜()์— ์ง‘์–ด๋„ฃ์Œ


[ React Component : ๋งŽ์€ div๋“ค์„ ํ•œ ๋‹จ์–ด๋กœ ์ค„์ด๊ณ  ์‹ถ์„ ๋•Œ ]

  • return()์•ˆ์— HTML์„ ๋„ฃ์„ ๋•Œ,
    ์ด๋ ‡๊ฒŒ ํƒœ๊ทธ 2๊ฐœ๋ฅผ ํ‰ํ–‰ํ•˜๊ฒŒ ์ ์–ด๋„ฃ์„ ์ˆ˜ ์—†๊ณ 
    ๊ตณ์ด ์“ด๋‹ค๋ฉด ์ด๋Ÿฐ ์‹์œผ๋กœ ํ•œ ๋ฒˆ ๋” ๊ฐ์‹ธ์•ผ ํ•จ -> return()์•ˆ์—” ํƒœ๋“œ ํ•˜๋‚˜๋งŒ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Œ

  • HTML์„ ์ค„์—ฌ์„œ ์“ธ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• : ๋ฆฌ์•กํŠธ์˜ Component ๋ฌธ๋ฒ•

  • Component ๋งŒ๋“œ๋Š” ๋ฒ•
    1. ํ•จ์ˆ˜ ๋งŒ๋“ค๊ณ  ์ด๋ฆ„ ์ง“๊ณ 
    2. ์ถ•์•ฝ์„ ์›ํ•˜๋Š” HTML ๋„ฃ๊ณ 
    3. ์›ํ•˜๋Š” ๊ณณ์— <ํ•จ์ˆ˜๋ช… />

  • Component ์œ ์˜์‚ฌํ•ญ
    1. ์ด๋ฆ„์€ ๋Œ€๊ด„ํ˜ธ
    2. return()์•ˆ์— ์žˆ๋Š” ๊ฑด ํƒœ๊ทธ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์•ผ ํ•จ

  • return() ๋‚ด๋ถ€๋ฅผ ๋ฌถ์„ ๋•Œ ์˜๋ฏธ์—†๋Š” < div >๋ฅผ ์“ฐ๊ธฐ ์‹ซ๋‹ค๋ฉด <></>

  • ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋‘๋ฉด ๊ด€๋ฆฌ๊ฐ€ ํŽธํ•ด์ง -> ์–ด๋–ค๊ฑธ Component๋กœ?
    1. ๋ฐ˜๋ณต ์ถœํ˜„ํ•˜๋Š” HTML ๋ฉ์–ด๋ฆฌ๋“ค
    2. ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋Š” HTML UI๋“ค
    3. ๋‹ค๋ฅธ ํŽ˜์ด์ง€ ๋งŒ๋“ค๋•Œ๋„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋งŒ๋“ฆ

  • ์ปดํฌ๋„ŒํŠธ ๋งŽ์ด ๋งŒ๋“ค๋ฉด ๋‹จ์  : state์“ธ๋•Œ ๋ณต์žกํ•ด์ง (์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋งŒ๋“  state์“ฐ๋ ค๋ฉด props๋ฌธ๋ฒ• ์ด์šฉํ•ด์•ผ ํ•จ)


[ ํด๋ฆญํ•˜๋ฉด ๋™์ž‘ํ•˜๋Š” UI(๋ชจ๋‹ฌ์ฐฝ) ๋งŒ๋“œ๋Š” ๋ฒ• ]

  1. ๋ชจ๋‹ฌ์ฐฝ์ด ๋ณด์ด๋Š” / ๋ณด์ด์ง€ ์•Š๋Š” ์ƒํƒœ ์ •๋ณด๋ฅผ ์ €์žฅํ•  state ํ•˜๋‚˜ ๋งŒ๋“ค๊ธฐ
  2. if๋ฌธ(์‚ผํ•ญ์—ฐ์‚ฐ์ž) ์ด์šฉํ•ด์„œ ์Šค์œ„์น˜ ์ผœ์ ธ ์žˆ์„ ๋•Œ๋งŒ ๋ชจ๋‹ฌ์ฐฝ ๋ณด์ธ๋‹ค๊ณ  ๋ช…์‹œ
  3. ๋ชจ๋‹ฌ์ฐฝ ์—ฌ๋‹ซ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๋ฒ„ํŠผ ํด๋ฆญ์‹œ state๊ฐ€ ๋ฐ”๋€Œ๋„๋ก ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ
  • map : ๋งŽ์€ div๋“ค์„ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์ค„์ด๊ณ  ์‹ถ์„ ๋•Œ

  • array๋‚ด์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ์— ๋˜‘๊ฐ™์€ ์ž‘์—…์„ ์‹œ์ผœ์ฃผ๊ณ  ์‹ถ์„ ๋•Œ .map()(์œ ์‚ฌ๋ฐ˜๋ณต๋ฌธ)์„ ์‚ฌ์šฉํ•จ

  • ๋ฐ˜๋ณต๋ฌธ ์“ฐ๋Š” ๋ฒ•

  • for๋ฐ˜๋ณต๋ฌธ์„ ์“ฐ๊ณ  ์‹ถ๋‹ค๋ฉด?
    ย  - ๋ณดํ†ต ํ•จ์ˆ˜ ์•ˆ์—์„œ ์‚ฌ์šฉํ•จ
    ย  - array์— HTML ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹
    ย  - ๊ทธ๋ฆฌ๊ณ  array๋ฅผ return์œผ๋กœ ๋ฑ‰์–ด๋ƒ„


[ props : ์ž์‹์ด ๋ถ€๋ชจ์˜ state๋ฅผ ๊ฐ€์ ธ๋‹ค ์“ฐ๊ณ  ์‹ถ์„ ๋•Œ๋Š” ๋งํ•˜๊ณ  ์“ฐ๊ธฐ ]

  • props๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด?
    1. <์ž์‹์ปดํฌ๋„ŒํŠธ ์ „์†กํ• ์ด๋ฆ„ = { state๋ช… } /> ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•œ ํ›„
    2. ์ž์‹์ปดํฌ๋„ŒํŠธ ์„ ์–ธํ•˜๋Š” ํ•จ์ˆ˜ ์†Œ๊ด„ํ˜ธ ๋‚ด์— ํŒŒ๋ผ๋ฏธํ„ฐ ํ•˜๋‚˜ ์ถ”๊ฐ€ํ•ด์ฃผ๊ธฐ

  • props๋ฅผ ์‘์šฉํ•œ ์ƒ์„ธํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ
    1. state๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ 
    2. state๊ฐ€ ์–ด๋– ํ•œ ์ƒํƒœ์ผ ๋•Œ UI๋ฅผ ์–ด๋–ป๊ฒŒ ๋ณด์—ฌ์ฃผ๋ผ๊ณ  ์ฝ”๋“œ ์งœ๋ฉด ๋
    3. ๋ฒ„ํŠผ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ ํ•  ๋•Œ๋Š” state๋ฅผ ์ด๋ ‡๊ฒŒ ๋ฐ”๊ฟ”์ฃผ์„ธ์š”~ ์ด๋Ÿฐ๊ฒƒ๋„ ํ•„์š”ํ•˜๋ฉด ์ถ”๊ฐ€


[ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ธ€์„ ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๋Š” ๋ฒ• ]

  • ์‚ฌ์šฉ์ž๊ฐ€ input์— ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ -> ๋ณดํ†ต ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ์ด๋ฏ€๋กœ state์— ์ €์žฅํ•ด์„œ ์‚ฌ์šฉ

  • map์„ ์“ฐ๋ฉด ์ฝ˜์†”์ฐฝ์— ์—๋Ÿฌ๋‚˜๋Š” ์ด์œ  ? key={}๋ผ๋Š” ์†์„ฑ์„ ์ ์ง€ ์•Š์•„์„œ (๋ฆฌ์•กํŠธ๋Š” ๋ฐ˜๋ณต๋ฌธ ๋Œ๋ฆฐ HTML ์š”์†Œ์—” ๊ผญ key={}๋ฅผ ์ ์œผ๋ผ๊ณ  ๊ถŒ์žฅํ•จ)

  • state๋Š” ์ง์ ‘ ์ˆ˜์ •ํ•˜๋ฉด ์•ˆ๋จ -> ์นดํ”ผ๋ณธ์„ ๋งŒ๋“ค์–ด ์ˆ˜์ •ํ•œ ํ›„ ๊ทธ๊ฒŒ ์ƒˆ๋กœ์šด state๊ฐ€ ๋˜๋„๋ก ํ•ด์•ผ ํ•จ


[ class๋ฅผ ์ด์šฉํ•œ ์˜›๋‚  React ๋ฌธ๋ฒ• ]

  • ์œ„์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ๋˜์–ด ์žˆ์Œ
profile
Archiving

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