๐Ÿ“š Study/JS, JQuery

[React JS][๋‹ˆ์ฝ” ์ฝ”๋”ฉ] Props

kkh1902 2022. 2. 17. 09:06
728x90
๋ฐ˜์‘ํ˜•

4.0 Props

  • ๋ฌด์—‡์ด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ผ์•ผ ํ•˜๋Š”์ง€, header๊ฐ€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋˜์–ด์•ผ ํ•˜๋Š”์ง€ ์•Œ๊ฒŒ ๋ ๊ฑฐ๋‹ค.
  • footer๊ฐ€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋˜์–ด์•ผ ํ•˜๋Š”์ง€, notificaion bar๊ฐ€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋˜์–ด์•ผ ํ•˜๋Š”์ง€
  • ์ด ๊ฐ๊ฐ์˜ ๋กœ์ง๋“ค์„ ๊ฐ๊ฐ์˜ ์กฐ๊ฐ๋“ค๋กœ ๋ถ„๋ฆฌ์‹œ์ผœ์„œ, ๋‹ค๋ฅธ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋ฅผ Rendering ํ•˜๋Š” ํฐ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

Props๋Š” ์ผ์ข…์˜ ๋ฐฉ์‹์ด๋‹ค. ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•

  • ์šฐ๋ฆฌ๊ฐ€ ํ•  ๊ฒƒ์€, ํ•œ ์˜ˆ์‹œ๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‹ค.
    • ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋Š” ๊ฑฐ๋‹ค.

Props๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ, ๊ทธ๋ฆฌ๊ณ  ์ง„์ •์œผ๋กœ ์ด๊ฒŒ ์™œ ํ•„์š”ํ•œ์ง€๋ฅผ ๋ณด๊ธฐ ์œ„ํ•ด Props๋กœ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋  ๋ฌธ์ œ๋“ค์„ ์ผ๋‹จ ๋จผ์ € ๊ฒช์–ด๋ด์•ผ ํ•œ๋‹ค.

  • ๊ฐ€์ •(์šฐ๋ฆฌ๊ฐ€ ํšŒ์‚ฌ์—์„œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค๊ณ  ์žˆ๋‹ค)
    • ์ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ฒ„ํŠผ์„ ๊ฐ–๊ณ  ์žˆ๋‹ค. ๊ฝค ๋งŽ์€ ๋‹ค์–‘ํ•œ ๋ฒ„ํŠผ๋“ค( ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ €์žฅ ๋ฒ„ํŠผ์ด๋ผ ๋“ ๊ฐ€, ์ทจ์†Œ ๋ฒ„ํŠผ์ด๋ผ ๋“ ๊ฐ€, ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ)
  • ์šฐ๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š”์ง€ ๋ชจ๋ฅธ๋‹ค.
    • ์šฐ๋ฆฌ๊ฐ€ ์•„๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๋ณผ ๊ฑฐ๋‹ค. ๊ฐ๊ฐ ๋ฒ„ํŠผ๋งˆ๋‹ค ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฑฐ๋‹ค.
    • function(ํ•จ์ˆ˜)๋ฅผ ๋งŒ๋“ค์–ด ๋ณผ๊ฑฐ๋‹ค. SaveBtn์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์ž
  • component(์ปดํฌ๋„ŒํŠธ)๋ผ๊ณ  ํ•˜๋Š”๊ฑด, ๋ณด๊ณ  ์žˆ๋Š” ๋Œ€๋กœ ๋‹จ์ง€ function(ํ•จ์ˆ˜)์ผ ๋ฟ์ด๋‹ค.
    • ์ปดํฌ๋„ŒํŠธ๋Š” ๋‹จ์ง€ ํ•จ์ˆ˜๋‹ค . ์–ด๋–ค JSX๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”
  • ์šฐ๋ฆฌ๊ฐ€ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์€ ๋‹จ์ง€ ์ด ํ•จ์ˆ˜๋“ค์„ ๋ถˆ๋Ÿฌ๋‚ด๋Š” ๊ฑฐ๋‹ค.
  • ์ด๊ฒŒ ํ•จ์ˆ˜๋ฅผ ๋ถ€๋ฅด๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ์ด๊ฒŒ (ํ•จ์ˆ˜ํ˜•) ์ปดํฌ๋„ŒํŠธ์ด๋‹ค.
  • ์ด๊ฑด JSX์˜ ๋‚ด๋ถ€๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฑฐ๋‹ค.
  • ๋ฌธ์ œ ( ๋””์ž์ธ ๊ตฌ๋ฆผ)
    • ์Šคํƒ€์ผ์„ ๋„ฃ์–ด์ค˜์•ผ ๊ฒ ์ ธ?
    • button์˜ style property(์†์„ฑ)์„ ์‚ฌ์šฉ
    • React JS์—์„œ style ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•
      • CSS ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•, ์—ฌ๋Ÿฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ์‚ฌ์šฉ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• button Tag(ํƒœ๊ทธ) ๋‚ด์˜ style์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฑฐ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ํ•˜๋Š” ๊ฑฐ๋Š” Best๊ฐ€ ์•„๋‹ˆ๋‹ค. ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๊ธธ๋‹ค.
  • style์„ ๊ทธ์ € ๋ณต๋ถ™ํ•˜๋Š” ๊ฒƒ ๋Œ€์‹ ์—, ๋ณด๋‹ค ์ข€ ๋” ์„ค์ •์ด ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ
    • text ๋งŒ ๋‹ค๋ฆ„
    • ์ด๋Ÿฐ style๋“ค์„ ๋ชจ๋‘ ๊ฐ–๋Š” ๋‹จ ํ•œ ๊ฐ€์ง€์˜ ์ปดํฌ๋„ŒํŠธ๋งŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋ฉด ์–ผ๋งˆ๋‚˜ ์ข‹์„๊นŒ?
  • ์šฐ๋ฆฌ๊ฐ€ ํ•ด์•ผํ•  ์ผ์€ ์šฐ๋ฆฌ๋“ค์˜ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ์ข€ ๋” ์„ค์ • ๊ฐ€๋Šฅํ•˜๊ฒŒ๋” ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.
    • text๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฑฐ๋‹ค.
    • HTML์—์„œ input์„ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ–ˆ์ง€?
    • button์„ ์„ค์ •(JSX) ์ด๊ฒŒ EventListener๋ฅผ ๋ถ™์—ฌ์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
    • ์•„๋ฌด๊ฒƒ๋„ ์ž‘๋™์•ˆํ•จ
    • banana์— Btn์„ ๋ณด๋ƒˆ๋Š”๋ฐ, ์ด Btn์€ banana๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์„œ ๊ทธ๋ ‡๋‹ค.
    • ๋ฐฐ์›Œ๋ณผ ๊ฑด, ๋„ค๊ฐ€ ๋งŒ๋“ค๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋“ค์€ “()” ๊ด„ํ˜ธ๋กœ argument(์ธ์ž)๋ฅผ ๋ฐ›๋Š”๋‹ค๋Š” ๊ฑฐ๋‹ค. ๋ฆฌ์•กํŠธ๊ฐ€ ๋„ฃ์–ด์ฃผ๋Š” ๊ฑฐ์ง€
    • ์ฒซ๋ฒˆ์งธ argument์˜ ์ด๋ฆ„์€ ๋งˆ์Œ๋Œ€๋กœ ์ง€์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค.
      • ์ด ์ธ์ž ์ด๋ฆ„์„ props๋ผ๊ณ  ๋ถ€๋ฅด๊ณ  Btn์œผ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ ๋ฐ›๋Š”properties ์ธ๊ฑฐ๋‹ค.
    • ๋˜‘๊ฐ™์€ ์˜๋ฏธ๋‹ค. Btn()ํ•จ์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์„œ banana๋ผ๋Š” ์ธ์ž๋ฅผ ์ด๋Ÿฐ์‹์œผ๋กœ ๋ณด๋‚ด๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.
    • ๊ทธ๋ž˜์„œ ์–ด๋–ค prop์ด๋“  ๋„ค๊ฐ€ Btn ์ปดํฌ๋„ŒํŠธ์— ๋ณด๋‚ด๋ฉด ๊ทธ๊ฒƒ๋“ค์€ Btn ํ•จ์ˆ˜์˜ ์ฒซ ๋ฒˆ์งธ argument(์ธ์ž) ์†์œผ๋กœ ๋“ค์–ด๊ฐˆ ๊ฒƒ์ด๋‹ค.
    • ์šฐ๋ฆฌ๋Š” ๋‘ ๊ฐœ์˜ console.log๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด Btn์„ “๋‘ ๋ฒˆ” rendering์„ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ
    • props๋Š” ์ฒซ ๋ฒˆ์งธ์ด์ž ์œ ์ผํ•œ ์ธ์ž๋‹ค. ์ด Btn์ด ์ „๋‹ฌ ๋ฐ›๋Š” ์œ ์ผํ•œ ์ธ์ž.
    • Props๋Š” ์˜ค๋ธŒ์ ํŠธ์ด๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ด์ชฝ์—์„œ ๋ณด๋‚ธ ๋ชจ๋“  ๊ฒƒ๋“ค์„ ๊ฐ–๋Š” ์˜ค๋ธŒ์ ํŠธ
    • ์ฒซ ๋ฒˆ์งธ Btn์˜ props๋Š” ์ด๋ ‡๊ฒŒ ์šฐ๋ฆฌ๊ฐ€ ๋„ฃ์€ ๋ชจ๋“  ๊ฒƒ์„ ๊ฐ–๋Š” ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋๋‹ค.
    • UI ๋Š” ๋‹ค๋ฅด๊ฒŒ ๋œ๋‹ค.
    • style ์•ˆ์—์„œ if else๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค . props ๊ธฐ๋ฐ˜์œผ๋กœ
  • <์ด์ •๋ฆฌ ํ•ด์„>
  • ReactDOM์„ render ํ•œ๋‹ค App์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฃจํŠธ๋กœ
    • APP์ปดํฌ๋„ŒํŠธ ์‹คํ–‰ ํ•˜๋Š”๋ฐ Btn ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‘๊ฐœ ์žˆ๋‹ค. ํ•˜๋‚˜๋Š” text๊ฐ€ "Save Changes"์ด๊ณ  big์ด๋ผ๋Š” ์†์„ฑ์€ true์ด๊ณ  ํ•˜๋‚˜๋Š” text ๊ฐ€ "Continue"๊ณ  big์ด๋ผ๋Š” ์†์„ฑ์€ false์ด๋‹ค.
    • style์€ backgroundColor๊ฐ€ "tomato" ์ด๊ณ  ๋“ฑ๋“ฑ ์žˆ๋Š”๋ฐ big ์˜ ์†์„ฑ์— ๋”ฐ๋ผ fontSize๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.

 

4.1 Memo

  • Btn๋“ค์— onClick function์„ ๋‹ฌ์•„์ฃผ๊ณ  ์‹ถ๋‹ค.
  • onClick function์€ ๋‚ด App ์ปดํฌ๋„ŒํŠธ์— ์žˆ๋Š” ๋ญ”๊ฐ€์˜ state๋ฅผ ๋ฐ”๊พธ๊ฒŒ ๋ ๊ฑฐ๋‹ค.
  • ๋ณด๋‚ด๋Š” string์„ ๋‹ค๋ฅธ ๊ฑธ๋กœ ๋ฐ”๊ฟจ์„ ๋ฟ์ด๋‹ค.
  • ๋งŒ์•ฝ onClick์„ ์—ฌ๊ธฐ ๋‚ด ์ปค์Šคํ…€ ์ปดํฌ๋„ŒํŠธ์—๋‹ค๊ฐ€ ๋„ฃ๋Š”๋‹ค๋ฉด ์ด๊ฑด ์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ๊ฐ€ ์•„๋‹ˆ๋‹ค.
  • ์‹ค์งˆ์ ์œผ๋กœ React๊ฐ€ ์ ˆ๋Œ€ ์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ถ”๊ฐ€์‹œํ‚ค๋Š”๊ฒŒ ์•„๋‹ˆ๋‹ค.
  • ์ด๊ฑด ๋‹จ์ง€ prop์˜ ์ด๋ฆ„์ผ ๋ฟ์ด๋‹ค
  • ์ด ์ƒํ™ฉ์—์„œ style์€ ๊ฒฐ์ฝ” ์ง์ ‘์ ์œผ๋กœ button์— ๋‹ฌ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.
  • prop๋“ค์„ ๊ฐ€์ ธ์™€์„œ ์ ์šฉ ์‹œ์ผœ์•ผ ํ•œ๋‹ค. ์œ„์— function์—์„œ
  • ๋‘๋ฒˆ์งธ ๋†ˆ Continue ๋†ˆ์€ ๋‹ค์‹œ ๊ทธ๋ฆด ํ•„์š”๊ฐ€ ์—†๋‹ค.(์ปดํฌ๋„ŒํŠธ)
  • React Memo(memorize ๊ธฐ์–ต)ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ฆฌ์•กํŠธ์—๊ฒŒ ๋งํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.
  • ์ฒซ ๋ฒˆ์งธ ๋ฒ„ํŠผ์˜ props๋Š” ๋ฐ”๋€”๊ฑฐ๋‹ค.
    • ์™œ๋ƒํ•˜๋ฉด ์ฒซ ๋ฒˆ์งธ ๋ฒ„ํŠผ์˜ props๋Š” state์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค
  • ์ด๋Ÿฐ feature๊ฐ€ ๋ฆฌ์•กํŠธ์— ์กด์žฌํ•œ๋‹ค๋Š” ๊ฑธ ๋ณด์—ฌ์ค€๋‹ค.(๊ธฐ์–ตํ•  ํ•„์š”X)
  • MemorizedBtn์€ ๋ฐ”๋กœ memorized version์˜ Btn์ด ๋  ๊ฑฐ๋‹ค.
  • Save Changes๋ฅผ ๋ˆ„๋ฅด๋ฉด, changeValue ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋  ๊ฑฐ๊ณ ,
  • changeValue๋Š” state๋ฅผ ๋ฐ”๊ฟ€๊ฑฐ๊ณ , ๊ทธ๊ฑด re-render๋ฅผ ๋ฐœ์ƒ ์‹œ์ผœ์•ผ๋งŒ ํ•œ๋‹ค.
  • ๋ณด๋„ˆ์Šค ๊ฐ™์€๊ฑฐ ์šฐ๋ฆฌ์˜ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ๋‹ค์‹œ ๊ทธ๋ ค์งˆ ๋•Œ ์šฐ๋ฆฌ๊ฐ€ ์ปจํŠธ๋กคํ•  ์ˆ˜ ์žˆ๋‹ค.
  • props๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋‹ค์‹œ ๊ทธ๋ฆด ํ•„์š”๊ฐ€ ์—†๋‹ค

 

 

4.2 Prop Types

  • ์–ด๋–ค prop์ด๋“  ๋ณด๋‚ผ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ํ•˜๊ณ  ์žˆ๋Š” ๋ญ๋“  ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ์˜ ํ™˜๊ฒฝ์„ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๋งŒํผ ์„ค์ •ํ•  ์ˆ˜๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • text๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ณ , booleanํƒ€์ž…๋„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
  • Btn์— ํ•œ ๊ฐ€์ง€ ๋” configuration(์„ค์ •)์„ ํ•ด๋ณด์ž
    • user(์‚ฌ์šฉ์ž)๊ฐ€ prop์œผ๋กœ fontSize๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด๋ณด์ž
  • ์šฐ๋ฆฌ๋Š” text๊ฐ€ string์ด ๋˜๊ธธ ์›ํ•˜๊ณ  fontSize๋Š” number๊ฐ€ ๋˜๊ธธ ์›ํ•œ๋‹ค
  • ๋ฆฌ์•กํŠธํŒ€์œผ๋กœ๋ถ€ํ„ฐ ๋‚˜์˜จ PropTypes๋ผ๋Š” ํ•œ ํŒจํ‚ค์ง€๊ฐ€ ์žˆ๋‹ค.
    • PropType์€ ๋‚ด๊ฐ€ ์–ด๋–ค ํƒ€์ž…์˜ prop์„ ๋ฐ›๊ณ  ์žˆ๋Š”์ง€๋ฅผ ์ฒดํฌํ•ด์ค€๋‹ค.
  • props์˜ ํƒ€์ž…์ด ๋ญ๊ณ  ์–ด๋–ค ๋ชจ์–‘์ด์–ด์•ผ ํ•˜๋Š”์ง€ ์šฐ๋ฆฌ๊ฐ€ ์„ค๋ช…ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

์‚ด์ง ์ดํ•ด์•ˆ๋Œ

4.3 Recap

4.2 4.3 ๋‹ค์‹œ๋ณด๊ธฐ

728x90
๋ฐ˜์‘ํ˜•