GithubHelp home page GithubHelp logo

nuuco / react-practice-with-study Goto Github PK

View Code? Open in Web Editor NEW
1.0 0.0 0.0 672 KB

๐ŸŒ ๋ฐ”๋‹๋ผ ์Šคํ„ฐ๋”” ๋ฆฌ์•กํŠธ ๊ตฌํ˜„ ์—ฐ์Šต + ์ฝ”๋“œ ๋ฆฌ๋ทฐ

HTML 6.21% JavaScript 90.82% CSS 2.97%

react-practice-with-study's Introduction

react-practice-with-study

๐ŸŒ ๋ฐ”๋‹๋ผ ์Šคํ„ฐ๋””์—์„œ ์ง„ํ–‰ํ•œ ๋ฆฌ์•กํŠธ ๊ตฌํ˜„ ๊ณผ์ œ๋ฅผ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.

๊ณผ์ œ ๋ชฉ๋ก (๋ฐฐํฌ ๋งํฌ)

  1. ๋ฆฌ์•กํŠธ ๊ณ„์‚ฐ๊ธฐ ๐Ÿ‘‰ https://react-calculator-nuuco.netlify.app/
  2. ๋ฆฌ์•กํŠธ ์ˆซ์ž์•ผ๊ตฌ ๊ฒŒ์ž„ ๐Ÿ‘‰ https://react-number-baseball.netlify.app/
  3. ๋ฆฌ์•กํŠธ ์ž๋™์ฐจ ๊ฒฝ์ฃผ ๊ฒŒ์ž„ ๐Ÿ‘‰ https://react-racingcar.netlify.app/
  4. ๋ฆฌ์•กํŠธ ์žํŒ๊ธฐ ๊ตฌํ˜„ ๐Ÿ‘‰ https://react-vendingmachine.netlify.app/

์ฝ”๋“œ ๋ฆฌ๋ทฐ ์ ์šฉ๊ธฐ

์ฒ˜์Œ ๊ฒฝํ—˜ํ•ด๋ณธ ์ฝ”๋“œ ๋ฆฌ๋ทฐ...! ํŒ€์›๋ถ„๋“ค๊ป˜ ๋ฐ›์€ ํ”ผ๋“œ๋ฐฑ์„ ์‹ค์ œ๋กœ ์ ์šฉํ•ด๋ณด์•˜๋‹ค.

ep1. ์„  ์ƒ๊ฐ ํ›„ ์ฝ”๋”ฉ

์•ž์„  ๊ณผ์ œ 1๊ณผ 2 ์ˆ˜ํ–‰ ํ›„, @YHJ96 ๋‹˜์˜ '์ฝ”๋“œ ์งœ๊ธฐ ์ „ ๋จผ์ € ์ƒ๊ฐํ•ด๋ณด๋Š” ์Šต๊ด€์„ ๋“ค์ด๋Š” ๊ฒŒ ์ข‹๋‹ค.'๋Š” ์ด์•ผ๊ธฐ๋ฅผ ๋“ค์—ˆ๋‹ค.
๐Ÿ‘‰ ์–ด๋–ค ์ˆœ์„œ๋ฅผ ์ฝ”๋“œ๋ฅผ ์งœ๊ณ  ์–ด๋–ค ๋กœ์ง์„ ์ ์šฉ์‹œ์ผœ์•ผ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ฏธ๋ฆฌ ์ƒ๊ฐํ•ด๋ณด๊ธฐ!

๐Ÿš— ๋ฆฌ์•กํŠธ ์ž๋™์ฐจ ๊ฒฝ์ฃผ ๊ฒŒ์ž„ - ๐Ÿงฉ ์ƒ๊ฐ ์ˆœ์„œ

๐Ÿ‘‰ ์ฒ˜์Œ์—๋Š” ๊ทธ๋ƒฅ ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค ๊ทœ์น™์— ๋งž์ถฐ์„œ ์ œ๋Œ€๋กœ ์ž…๋ ฅํ–ˆ์„ ๋•Œ๋งŒ ์ƒ๊ฐํ•˜์ž!

  1. ์šฐ์„  ํ•„์š”ํ•œ state ๋ฅผ ํŒŒ์•…ํ•œ๋‹ค.

  2. ๊ธฐ๋ณธ์ ์œผ๋กœ input ์ฐฝ์ด ๋‘ ๊ฐœ๋‹ˆ๊นŒ ๊ฐ๊ฐ state ๋กœ ํ•„์š”ํ•˜๊ฒ ์ง€? ๊ทธ๋ฆฌ๊ณ  ์‹คํ–‰๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” state ๋„ ํ•„์š”.

  3. ์ž๋™์ฐจ ์ด๋ฆ„ state ์™€ ์‹œ๋„ํ•  ํšŸ์ˆ˜ state, ๊ทธ๋ฆฌ๊ณ  ์‹คํ–‰ ๊ฒฐ๊ณผ state ๋ฅผ ๋งŒ๋“ ๋‹ค. (carsInput, tryNum, result)

  4. ์•ž์˜ ๋‘ state๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ž…๋ ฅ๊ฐ’์„ ๋ฐ›์•„์™€์„œ state์— ์ €์žฅํ•ด์ฃผ๋Š” ๋กœ์ง(์ด๋ฒคํŠธํ•ธ๋“ค๋Ÿฌ)์„ ๋จผ์ € ์งœ๋ฉด ๋˜๊ฒ ๊ตฌ๋‚˜. ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋Š” ๋‚˜์ค‘์— ์ƒ๊ฐ.

  5. ๊ฐ ๋ฒ„ํŠผ๋„ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด ์žˆ์œผ๋‹ˆ ํ•ด๋‹นํ•˜๋Š” ์ด๋ฒคํŠธํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋งŒ๋“ค์–ด์ค˜์•ผ๊ฒ ๋„ค...
    a) ์ž๋™์ฐจ ์ด๋ฆ„ ํ™•์ธ ๋ฒ„ํŠผ
    -> ํด๋ฆญํ–ˆ์„ ๋•Œ, ์ž…๋ ฅ๊ฐ’ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌํ•ด์ฃผ๋ฉด ๋˜๊ฒ ๋‹ค. alert ์ฐฝ ๋„์šฐ๊ธฐ
    -> ์—์™ธ์ฒ˜๋ฆฌ๋‹ˆ๊นŒ ๋‚˜์ค‘์— ๊ตฌํ˜„ํ•˜์ž...
    b) ์‹œ๋„ํ•  ํšŸ์ˆ˜ ํ™•์ธ ๋ฒ„ํŠผ
    -> ํด๋ฆญํ–ˆ์„ ๋•Œ, ์œ ํšจํ•œ ์ˆ˜์ธ์ง€ ๊ฒ€์‚ฌํ•˜๊ณ (alert ์ฐฝ ๋„์›Œ์ฃผ๊ธฐ) ์œ ํšจํ•˜๋ฉด ๊ฒฝ์ฃผ๋ฅผ ์‹คํ–‰ํ•˜์ž.
    -> ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋Š” ๋‚˜์ค‘์— ํ•œ๋‹ค ์น˜๊ณ  ์ผ๋‹จ ๋ฒ„ํŠผ ํด๋ฆญ์‹œ ๊ฒฝ์ฃผ ์‹คํ–‰ํ•˜๊ฒŒ๋งŒ ๋งŒ๋“ค์–ด ๋†“์ž...

  6. ๋‘ ๊ฐ’์„ ์ด์šฉํ•ด ๊ฒฝ์ฃผ๋ฅผ ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค. ๊ฒฝ์ฃผ ํ•จ์ˆ˜์˜ ๋กœ์ง์€ ์ด ์ •๋„๋ฉด ๋˜๊ฒ ์ง€?
    a) ์ž๋™์ž ์ด๋ฆ„์„ ์‰ผํ‘œ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ ์„œ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.
    -> ๋ฐ”๋กœ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค๋ฉด ์ž…๋ ฅ ์ˆœ์„œ์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ’์ด ๋‚˜์˜ค์ง€ ์•Š์Œ. (b, a, 12 ํ•˜๋ฉด 12, a, b ์ˆœ์„œ๋กœ ๋‚˜์˜ด)
    b) ๊ทธ ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ํ‚ค๋กœ ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ์ค€๋‹ค.
    c) ์‹œ๋„ ํšŸ์ˆ˜ ๋งŒํผ for ๋ฌธ์„ ๋ˆ๋‹ค.
    d) ๊ฐ ์ž๋™์ฐจ๊ฐ€ ๋žœ๋คํ•จ์ˆ˜๋ฅผ ๋Œ๋ ค 4์ด์ƒ์ด ๋‚˜์˜ค๋ฉด ํ•ด๋‹น ์ž๋™์ฐจ๋ฅผ ํ‚ค๋กœ ํ•˜๋Š” ๊ฐ’์— +1
    e) ํ•œ ํšŸ์ˆ˜ ์‹œ๋„ํ•  ๋•Œ๋งˆ๋‹ค์˜ ๊ฐ์ฒด ๊ฐ’์„ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•ด๋‘”๋‹ค.
    f) for ๋ฌธ์ด ๋๋‚˜๋ฉด ์ด์ œ ๊ฐ์ฒด์—๋Š” ์ตœ์ข…๊ฒฐ๊ณผ๊ฐ€ ๋‹ด๊ฒจ์žˆ๋‹ค. ์ด ์ตœ์ข…๊ฒฐ๊ณผ๋กœ ์šฐ์Šน์ž๋ฅผ ๋ฝ‘๋Š”๋‹ค.
    g) ๊ฐ ํšŸ์ˆ˜๋ณ„ ๊ฒฐ๊ณผ + ์šฐ์Šน ๊ฒฐ๊ณผ๋ฅผ result ์— ์ €์žฅํ•ด์•ผ์ง€.

  7. result ๊ฐ€ ๋‹ค ๋‚˜์™”์œผ๋‹ˆ๊นŒ return ๋ถ€๋ถ„์— ์ด result๋ฅผ ๋ณด์—ฌ์ฃผ๋ฉด ๋˜๊ฒ ๋‹ค.

    ---- ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ----

  8. ์ž๋™์ฐจ ์ด๋ฆ„ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.
    -> ์ผ๋‹จ, split(,)๋กœ ๋ฐฐ์—ด์–ด ๋‹ด์•„์˜ค๊ณ  ๊ฐ ์š”์†Œ๋ฅผ ๊ฒ€์‚ฌํ•œ๋‹ค.
    -> ๋นˆ ๊ฐ’์ด ์žˆ๋Š”์ง€, ๊ณต๋ฐฑ์ด ์žˆ๋Š”์ง€, 5์ž๋ฅผ ์ดˆ๊ณผํ•˜๋Š”์ง€

  9. ์‹œ๋„ํ•  ํšŸ์ˆ˜ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.
    -> 0์ด๋‚˜ ์Œ์ˆ˜๋ฉด alert
    -> ์ž๋™์ฐจ ์ด๋ฆ„์ด ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ†ต๊ณผ ๋ชปํ–ˆ์œผ๋ฉด alert (์•„... ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ํ†ต๊ณผ ์—ฌ๋ถ€ ์ €์žฅํ•˜๋Š” state ๋„ ํ•„์š”ํ•˜๊ฒ ๋„ค....)

  10. ์ž๋™์ฐจ ์ด๋ฆ„์ด ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ํ†ต๊ณผํ–ˆ๋Š”์ง€ ์—ฌ๋ถ€ ์ €์žฅํ•˜๋Š” state๋ฅผ ๋งŒ๋“ ๋‹ค. (isValid)

  11. ์ž๋™์ฐจ ์ด๋ฆ„ ํ™•์ธ ๋ฒ„ํŠผ ํด๋ฆญ์‹œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ํ†ต๊ณผํ•œ ๊ฒฝ์šฐ๋งŒ ๊ฒฝ์ฃผ ์‹คํ–‰.

๐Ÿค”โ“ ๊ณ ๋ฏผ ๊ฑฐ๋ฆฌ

  1. ์ž๋™์ฐจ ์ด๋ฆ„ state๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋„ฃ์–ด์ค˜์•ผ ์ข‹์„๊นŒ, ๋ฐฐ์—ด์„ ๋„ฃ์–ด์ค˜์•ผ ์ข‹์„๊นŒ? input ๊ฐ’์„ ๋ฐ›์•„์˜ค๋Š” state๋Š” ์ •์ œํ•ด์„œ ๋„ฃ๋Š”๊ฒŒ ์ข‹์€๊ฐ€ ์•„๋‹˜ ๊ทธ๋ƒฅ ๋„ฃ๊ณ  ์“ธ ๋•Œ ์ƒํ™ฉ๋งž์ถฐ ์ •์ œ?
  2. ๋‚˜๋Š” input ํƒœ๊ทธ์— value ๊ฐ’์„ ๊ผญ ๋„ฃ์–ด์ฃผ๋Š”๋ฐ, ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋„ ๋„ฃ์–ด์ฃผ๋Š”์ง€, ์ด๊ฒŒ ๊ผญ ํ•„์š”ํ•œ๊ฑด์ง€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ ์ฝ”๋“œ ํ™•์ธํ•ด๋ณด์ž.
  3. ์–ด๋–ค ์ด๋ฒคํŠธ์—์„œ ์–ด๋–ค ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค˜ํ•˜๋Š”์ง€ ํ—ท๊ฐˆ๋ฆฐ๋‹ค. ์ข€ ๊ธฐํš ๋ถ€๋ถ„์ด๊ธด ํ•œ๋ฐ...
    -> ์ž…๋ ฅํ•  ๋•Œ ์ž˜๋ชป ์ž…๋ ฅ์‹œ ๋ฐ”๋กœ alert๊ฐ€ ์ข‹์„๊นŒ, ํ™•์ธ ๋ฒ„ํŠผ ๋ˆ„๋ฅธ ๋’ค alert๊ฐ€ ์ข‹์„๊นŒ?
  4. ์ฒ˜์Œ์—๋Š” result๋ฅผ ๊ฐœํ–‰๋ฌธ์ž๋ฅผ ๋„ฃ์€ ๋ฌธ์ž์—ด๋กœ ์„ธํŒ…ํ•ด์„œ {result}๋กœ ํ•œ๋ฒˆ์— ๋ณด์—ฌ์ฃผ๋ ค ํ–ˆ๋‹ค.
    -> ํ•˜์ง€๋งŒ ๊ฐœํ–‰๋ฌธ์ž๊ฐ€ html ์—์„œ๋Š” ์ถœ๋ ฅ๋˜์ง€ ์•Š์•˜๋‹ค. ํ•œ์ค„๋กœ๋งŒ ๋‚˜์˜ด...
    -> <pre>{result}</pre> ๋กœ ๋„ฃ์œผ๋ฉด ์ค„๋ฐ”๊ฟˆ์€ ๋˜๋‚˜, ํฐํŠธ ๋Š๋‚Œ์ด ๋‹ฌ๋ผ์ ธ์„œ ๊ธฐ๊ฐ
    -> ๊ทธ๋ž˜์„œ result๋ฅผ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค๊ณ  map์„ ๋Œ๋ ค ๊ฐ ๋ฌธ์ž์—ด์„ <span>{item}<br/></span> ์œผ๋กœ ์ถœ๋ ฅ ํ•จ.
    -> ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์—†์„๊นŒ?
    ==> ํ•ด๊ฒฐ : css ๋กœ white-space : pre ๋ฅผ ์ฃผ๋ฉด ํฐํŠธ๊ฐ€ ๋‹ฌ๋ผ์ง€์ง€ ์•Š๊ณ  ๊ฐœํ–‰๋ฌธ์ž๊ฐ€ ์ ์šฉ๋œ๋‹ค!
    ===> ์ด๋ ‡๊ฒŒ <p style={{whiteSpace:"pre"}} >(๊ฐœํ–‰๋ฌธ์ž & ์—ฐ์†๊ณต๋ฐฑ ์ธ์‹) or pre-line(๊ฐœํ–‰๋ฌธ์ž๋งŒ ์ธ์‹, ์—ฐ์†๊ณต๋ฐฑ์€ ํ•˜๋‚˜๋กœ ์ธ์‹)
  5. result๋ฅผ map์œผ๋กœ ๋ฟŒ๋ ค์ค„ ๋•Œ, ํ‚ค์— ์ธ๋ฑ์Šค ๋ง๊ณ  ๋‹ฌ๋ฆฌ ์ค„๊ฒŒ ์žˆ๋‚˜...?
    ===> npm ์˜ nanoid, shortid ๋ชจ๋“ˆ ๋‹ค์šด๋ฐ›์•„ ์‚ฌ์šฉ. ์œ ๋‹ˆํฌํ•œ ์•„์ด๋””๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ ๋งค๋ฒˆ ๊ฐ’์ด ๋ฐ”๋€Œ๋‹ˆ ์–ด์ฐจํ”ผ ๊ฒฐ๊ณผ ์ „์ฒด๋ฅผ ๋ฆฌ๋žœ๋”ํ•ด์•ผํ•ด์„œ idx๋กœ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.
    $ npm i shortid
    import shortid from 'shortid';
    
    ...
    //์ ์šฉ
    shortid.generate();  
    //ex) o5I6xwNG6j

ep2. ์ฝ”๋“œ ๋ฆฌ๋ทฐ, ์ œ๊ฐ€ ํ•œ๋ฒˆ ์ ์šฉํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿš— ๋ฆฌ์•กํŠธ ์ž๋™์ฐจ ๊ฒฝ์ฃผ ๊ฒŒ์ž„ - ๐ŸŒ ์ฝ”๋“œ ๋ฆฌ๋ทฐ
  1. handleCarsBtn ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋” ์ตœ์ ํ™” ์‹œํ‚ค๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

    • ์ฒ˜์Œ์— setIsValid(false) ๋กœ ํ•˜๊ณ  ์˜ˆ์™ธ์ฒ˜๋ฆฌ์—์„œ ๊ฑธ๋ฆฌ๋ฉด return ํ•ด๋ฒ„๋ฆฌ๊ณ  ๊ฑธ๋ฆฌ์ง€ ์•Š์œผ๋ฉด ๋งจ ๋งˆ์ง€๋ง‰์— setIsValid(false) ํ•ด์ฃผ๋ฉด ์ฝ”๋“œ๋ฅผ ๋” ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
    • ๋˜ํ•œ alert ์™€ return ๋ฌธ์€ ํ•ฉ์น  ์ˆ˜ ์žˆ๋‹ค. return alert(...) ์ด๋ ‡๊ฒŒ.
    • ์•„๋‹ˆ๋ฉด ์ •๊ทœํ‘œํ˜„์‹์„ ์จ์„œ ๋” ๊ฐ„๋žตํ•˜๊ฒŒ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ํ•ด์ค„ ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ?
    • ๐Ÿ’ป ์ด์ „ ์ฝ”๋“œ
      //car ์ข…๋ฅ˜ ์ž…๋ ฅ ํ™•์ธ ๋ฒ„ํŠผ ํ•ธ๋“ค๋Ÿฌ
      const handleCarsBtn = (e) => {
         e.preventDefault();
         const tmp = carsInput.split(',');
         setIsValid(true);
         for(let car of tmp) {
            if(car === '') {
               alert('๋นˆ ์ด๋ฆ„์ด ์žˆ์Šต๋‹ˆ๋‹ค.');
               setIsValid(false);
               return;
            }else if(car.includes(' ')) {
               alert('๊ณต๋ฐฑ์„ ํฌํ•จํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.');
               setIsValid(false);
               return;
            }else if(car.length > 5) {
               alert('์ด๋ฆ„์€ 5์ž ์ดํ•˜๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.');
               setIsValid(false);
               return;
            }
         }
      }
    • ๐Ÿ’ป ๋ฆฌ๋ทฐ ๋ฐ˜์˜ 1
      //car ์ข…๋ฅ˜ ์ž…๋ ฅ ํ™•์ธ ๋ฒ„ํŠผ ํ•ธ๋“ค๋Ÿฌ
      const handleCarsBtn = (e) => {
         e.preventDefault();
         const tmp = carsInput.split(',');
         setIsValid(false);
         for(let car of tmp) {
            if(car === '') {
               return alert('๋นˆ ์ด๋ฆ„์ด ์žˆ์Šต๋‹ˆ๋‹ค.');
            }else if(car.includes(' ')) {
               return alert('๊ณต๋ฐฑ์„ ํฌํ•จํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.');
            }else if(car.length > 5) {
               return alert('์ด๋ฆ„์€ 5์ž ์ดํ•˜๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.');
            }
         }
         setIsValid(true);
      }
    • ๐Ÿ’ป ๋ฆฌ๋ทฐ ๋ฐ˜์˜ 2 : ์ •๊ทœ ํ‘œํ˜„์‹ ์‚ฌ์šฉ
      //car ์ข…๋ฅ˜ ์ž…๋ ฅ ํ™•์ธ ๋ฒ„ํŠผ ํ•ธ๋“ค๋Ÿฌ
      const handleCarsBtn = (e) => {
         e.preventDefault();
         const tmp = carsInput.split(',');
         const regex = /^[^\s]{1,5}$/;
         setIsValid(false);
         for(let car of tmp) {
            if(!regex.test(car)) {
               return alert("์ด๋ฆ„์€ ๊ณต๋ฐฑ ๋ฏธํฌํ•จ 1 ~ 5์ž ์‚ฌ์ด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.");
            }
         }
         setIsValid(true);
      }
  2. ์ค‘์ฒฉ for ๋ฌธ๊ณผ ์ค‘์ฒฉ if ์‚ฌ์šฉ์œผ๋กœ ๊ฐ€๋…์„ฑ์ด ์•ˆ ์ข‹๋‹ค.

    • ์ค‘์ฒฉ์ด ๋งŽ์•„์ง€๋Š” ๋ถ€๋ถ„์€ ๋”ฐ๋กœ ํ•จ์ˆ˜๋กœ ๋นผ๋„ ๋  ๊ฒƒ ๊ฐ™๋‹ค.
    • ๐Ÿ’ป ์ด์ „ ์ฝ”๋“œ
      const tryArr = [];
      let max = 0; //์šฐ์Šน์ž๋ฅผ ๋ฝ‘๊ธฐ์œ„ํ•ด ์ตœ๋Œ“๊ฐ’ ๊ตฌํ•˜๊ธฐ
      for(let i = 1; i <= tryNum; i++) {
         for(let car in carsObj) {
            const randomNumber = Random.pickNumberInRange(1, 9);
            if(randomNumber >= 4) {
               carsObj[car] += 1;
               if(max < carsObj[car]) {
                  max = carsObj[car];
               }
            }
         }
         tryArr.push(...createTryMsg(carsArr, carsObj));
         tryArr.push('\n');
      }
    • ๐Ÿ’ป ๋ฆฌ๋ทฐ ๋ฐ˜์˜
      const tryArr = [];
      for(let i = 1; i <= tryNum; i++) {
         tryOneRace(carsObj);
         tryArr.push(...createTryMsg(carsArr, carsObj));
         tryArr.push('\n');
      }
      
      ...
      //์ตœ๋Œ“๊ฐ’ ๊ตฌํ•˜๋Š” ๋กœ์ง์€ ๋งˆ์ง€๋ง‰ ์‹œ๋„๊ฐ€ ๋๋‚œ ๋’ค ์‹คํ–‰
      let max = Math.max(...Object.values(carsObj));
      ...
      
      //1ํšŒ ๊ฒฝ์ฃผ ์‹คํ–‰ ํ•จ์ˆ˜
      const tryOneRace = (carsObj) => {
         for(let car in carsObj) {
            const randomNumber = Random.pickNumberInRange(1, 9);
            if(randomNumber >= 4) {
               carsObj[car] += 1;
            }
         }
      }
๐Ÿฅซ ๋ฆฌ์•กํŠธ ์žํŒ๊ธฐ ๊ตฌํ˜„ - ๐ŸŒ ์ฝ”๋“œ ๋ฆฌ๋ทฐ
  1. props์˜ undefined ์ฒ˜๋ฆฌ๋Š” props๋ฅผ ๊ตฌ์กฐ๋ถ„ํ•ด ํ• ๋‹น์œผ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๋ถ€๋ถ„์—์„œ ๊ธฐ๋ณธ๊ฐ’ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
    • ๋ฆฌ๋ทฐ ๋ฐ˜์˜ ์ „
      //Management.jsx
      {/* products && ๋ฅผ ๋„ฃ์–ด์ฃผ์ง€ ์•Š์œผ๋ฉด 'map' undefined ๊ฐ€ ๋œฌ๋‹ค. (ํ…Œ์ŠคํŠธ์—์„œ๋งŒ) */}
      {/* ์ฒซ ๋ Œ๋”๋ง์‹œ products์— ๋ฐ์ดํ„ฐ๊ฐ€ ์•ˆ๋“ค์–ด์™€์„œ undefined ์ผ๋•Œ map ๋ฉ”์„œ๋“œ๋ฅผ ์จ์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜ */}
      {products && products.map((el, idx) => (
      <tr key={idx}>
          <td>{el.product}</td>
          <td>{el.price}</td>
          <td>{el.count}</td>
      </tr>
      ))}
    • ๋ฆฌ๋ทฐ ๋ฐ˜์˜ ํ›„
      ///Management.jsx
      function Management({products = [], setProducts}) { //๊ธฐ๋ณธ๊ฐ’ ์ฒ˜๋ฆฌ
          ...
          {products.map((el, idx) => (
              <tr key={idx}>
                  <td>{el.product}</td>
                  <td>{el.price}</td>
                  <td>{el.count}</td>
              </tr>
          ))}
      }
  2. e.target.reset() ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ž…๋ ฅํผ์„ ์ดˆ๊ธฐํ™” ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ๋ฒ„ํŠผ ๋ˆ„๋ฅธ ํ›„ ๊ฐ’์ด ๋‚จ์•„์žˆ์ง€ ์•Š๊ฒŒ ํ•˜๊ธฐ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค.
    => ์ž…๋ ฅ๊ฐ’์„ ๋ฐ›์•„์˜ค๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์˜ ํ•˜๋‹จ์— e.target.reset() ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๋‹ค.

Git Commit Message

ํƒœ๊ทธ์ด๋ฆ„ ์„ค๋ช…
feat ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€
fix ๋ฒ„๊ทธ ์ˆ˜์ •
design CSS ๋“ฑ ์‚ฌ์šฉ์ž UI ์ˆ˜์ •
style ์ฝ”๋“œ ํฌ๋งท ๋ณ€๊ฒฝ, ์„ธ๋ฏธ ์ฝœ๋ก  ๋ˆ„๋ฝ, ์ฝ”๋“œ ์ˆ˜์ •์ด ์—†๋Š” ๊ฒฝ์šฐ
refactor ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง
comment ์ฃผ์„ ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝ
docs ๋ฌธ์„œ ์ˆ˜์ • (MD ํŒŒ์ผ)
chore ๋นŒ๋“œ ํ…Œ์ŠคํŠธ, ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ์„ค์ •
rename ํŒŒ์ผ ํ˜น์€ ํด๋”๋ช… ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์˜ฎ๊ธฐ๋Š” ์ž‘์—…
remove ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๋Š” ์ž‘์—…๋งŒ ํ•˜๋Š” ๊ฒฝ์šฐ
change ๋ฌธ์ž๋งŒ ๋ณ€๊ฒฝํ•œ ๊ฒฝ์šฐ

react-practice-with-study's People

Contributors

nuuco avatar

Stargazers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.