23.04.27 TIL๐Ÿ˜ญ

์ƒค์ด๋‹ˆยท2023๋…„ 4์›” 27์ผ
1

learned.log

๋ชฉ๋ก ๋ณด๊ธฐ
37/46

๋„ค์ดํŠธ์™€์˜ ์ฒซ ๋ฉ˜ํ† ๋ง!

ํŒ€์ด ๋ฐ”๋€Œ๊ณ  ์ฒ˜์Œ์œผ๋กœ ๋ฉ˜ํ† ๋ง์„ ์ง„ํ–‰ํ–ˆ๋‹ค. ๊ฐ์ž ์†Œ๊ฐœ๋ฅผ ํ•˜๊ณ  ์•ž์œผ๋กœ์˜ ๋ฐฉํ–ฅ์„ฑ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆ„์—ˆ๋‹ค. ๋˜ํ•œ react ํ•™์Šต ์งˆ๋ฌธ 2๊ฐ€์ง€๋ฅผ ํ•ด์„œ ์„ค๋ช…์„ ๋“ค์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
1. state๋Š” const๋กœ ์„ ์–ธ์ด ๋˜๋Š”๋ฐ ์–ด๋–ป๊ฒŒ setter๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ’์ด ๋ฐ”๋€Œ๋Š”์ง€?! ๋‚ด๋ถ€ ๋™์ž‘ ์›๋ฆฌ๊ฐ€ ๊ถ๊ธˆํ•˜๋‹ค.(์ถ”ํ›„ ํฌ์ŠคํŒ… ์˜ˆ์ •!)

  1. update function ๊ทœ์น™
    ์ด๊ฒƒ์€ ์ถ”๊ฐ€์ ์œผ๋กœ ๊ณต์‹๋ฌธ์„œ๋ฅผ ์ฝ์€ ํ›„ ์™„์ „ํžˆ ๋‚ด๊ฒƒ์œผ๋กœ ๋งŒ๋“ค์—ˆ๋‹ค!

    but useState์˜ ๋‚ด๋ถ€ ์†Œ์Šค์ฝ”๋“œ ๊ตฌ์กฐ๊ฐ€ ๊ถ๊ธˆํ•ด์„œ ๋œฏ์–ด๋ณด๋Š” ์ค‘.. ์•„๋งˆ ํ•œ๋‹ฌ์ •๋„ ๊ฑธ๋ฆฌ๋Š” ์—ฌ์ •์ผ ๊ฒƒ๊ฐ™๋‹ค. ์‹œ๊ฐ„์„ ์ž˜ ๋ถ„๋ฐฐํ•ด์„œ ํ‹ˆํ‹ˆํžˆ ๋œฏ์–ด๋ณผ ์˜ˆ์ •! ์™„๋ฃŒ๊ฐ€๋œ๋‹ค๋ฉด ํฌ์ŠคํŒ… ํ•  ์˜ˆ์ •์ด๋‹ค ใ…Žใ…Ž

๋ฉ”์ด์ปค์ค€ ํŠน๊ฐ•

์˜ค๋Š˜์€ ๋ฉ”์ด์ปค์ค€๋‹˜๊ณผ์˜ ํŠน๊ฐ•์ด ์žˆ์—ˆ๋˜ ๋‚ ! ์•ฝ 1์‹œ๊ฐ„ ๋ฐ˜ ์ •๋„ ์ง„ํ–‰์„ ํ–ˆ๊ณ , ๋งŽ์€ ์ธ์‚ฌ์ดํŠธ๋ฅผ ์–ป์€ ์‹œ๊ฐ„์ด์—ˆ๋‹ค ใ…Žใ…Ž ํŠน๊ฐ•์€ ๋‘ฅ๊ธ€๊ฒŒ ๋‘˜๋Ÿฌ์•‰์•„์„œ ์ง„ํ–‰ํ–ˆ๋Š”๋ฐ ํŽธ์•ˆํ•œ ๋ถ„์œ„๊ธฐ ์†์—์„œ ๋งŽ์€ ์งˆ๋ฌธ์„ ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์•˜๋‹ค.

  1. React ๊ณต๋ถ€๊ฐ€ ๋„ˆ๋ฌด ํž˜๋“ค์–ด์š”

    ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ณต๋ถ€ํ•  ๋•Œ ๊ฐœ๋…์„ ๊ฐœ๋…์ ์œผ๋กœ ๊ณต๋ถ€ํ•˜๊ณ ์ž ํ•˜๋ฉด ๋„ˆ๋ฌด๋‚˜ ํž˜๋“ค๋‹ค.

    ์‹ค์ œ ์‚ฌ์šฉํ•˜๋Š” ๋งฅ๋ฝ์„ ๋งŒ๋“ค์–ด์•ผ ์Šต๋“์ด ํ›จ์”ฌ ์ˆ˜์›”ํ•˜๋‹ค.

    • ๊ฐ„๋‹จํ•˜์ง€๋งŒ, ์“ธ ๊ฒƒ ๊ฐ™์€ ์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ด์•ผ ํ™œ์šฉ๋Šฅ๋ ฅ์ด ๋†’์•„์ง„๋‹ค.
    • ๋ชจ๋ฒ•์ƒ ๊ฐ™์€ ๊ณต๋ถ€๋ฒ•์€ ๊ฐœ๋ฐœ์ž ๋งˆ์ธ๋“œ์—์„œ ๋ฒ—์–ด๋‚จ!
      • ex) ์ƒํƒœ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•˜์ง€? ์ด๋Ÿฐ์‹์€ ์•ˆ๋˜๊ณ 
  2. ๊ฐ€๊ณ ์‹ถ์ง€ ์•Š์€ ํšŒ์‚ฌ์— ํ•ฉ๊ฒฉํ•  ๊ฒฝ์šฐ, ๊ฐ€๋Š”๊ฒŒ ๋‚˜์„์ง€, ๊ณต๋ถ€๋ฅผ ๋” ํ•˜๋Š”๊ฒŒ ๋‚˜์„์ง€?

    • ์ข‹์€ ํšŒ์‚ฌ๋ฅผ ๊ณ ๋ฅด๋Š” ๊ธฐ์ค€?
      • ๋‚˜์—๊ฒŒ ์ž˜ ๋งž๋Š” ์ข‹์€ ํšŒ์‚ฌ๋ฅผ ๊ณ ๋ฅด๋Š” ๊ธฐ์ค€
      • ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ๊ณผ ์ธ์žฌ์ƒ์ด ๋‹ค๋ฅด๊ฑฐ๋‚˜ ๋‚˜์˜ ์žฅ์ ์„ ์–ดํ•„ํ•˜๊ธฐ ์–ด๋ ค์šด ํšŒ์‚ฌ์ผ ์ˆ˜๋„ ์žˆ๋‹ค.
      • ํ•ฉ๊ฒฉ ํ™•๋ฅ ์„ ๊ฐ€์žฅ ๋†’์ด๋Š” ๊ฒƒ์€ ๋‚ด ์žฅ์ ์„ ๊ฐ•์กฐํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค.
        • ์ฑ„์šฉ ์‹œ์žฅ์ด ์ข‹์ง€ ์•Š๋‹ค.
      • ์™„๋ฒฝํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜. ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ์–ด๋–ค ๊ณ ๋ฏผ์„ ์—ฌ๊ฒผ๋Š”์ง€? ๋“ฑ์ด ์ฑ„์šฉ๊ณต๊ณ ์— ์ž˜ ๋“ค์–ด๋‚˜์žˆ๋‹ค.
    • ์ด๋Ÿฐ ํšŒ์‚ฌ๋Š” ํ”ผํ•˜๋ผ?
      • ํšŒ์‚ฌ๋‚˜ ํŒ€์„ ๋ฆฌ์ŠคํŠธ์—… ํ•ด๋ณด๊ณ  ๊ทธ ํšŒ์‚ฌ๋‚˜ ํŒ€์˜ insider๋“ค. ์‚ฌ๋žŒ๋“ค์„ ์ปจํƒํ•ด๋ด๋ผ
        • ์ปคํ”ผ์ฑ— ํ•„์ˆ˜
  3. ๋‚ด ์žฅ์ ์„ ์‚ด๋ฆฌ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ฆ์š”ํ•œ ๊ฒƒ์ด๋ผ๊ณ  ํ•จ. ๋ถ€ํŠธ์บ ํ”„๊ฐ€ ์ง€๊ธˆ๊นŒ์ง€๋„ ๊ต‰์žฅํžˆ ๋งŽ์•˜๊ณ , ์•ž์œผ๋กœ๋„ ๋งŽ์ด ์ƒ๊ธธํ…๋ฐ, ๊ธฐ์ˆ ์ ์ธ ์ปค๋ฆฌํ˜๋Ÿผ์€ ๋น„์Šทํ•  ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐ๊ด‘๋ฐ›๋Š” ๋ฆฌ์•กํŠธ๋ฅผ ํ•™์Šตํ•œ๋‹ค๋˜๊ฐ€.. ๊ทธ๋ž˜์„œ ์ฃผ๋‹ˆ์–ด์˜ ์ž…์žฅ์—์„œ ๊ธฐ์ˆ ์  ์—ญ๋Ÿ‰์€ ๋‹ค๋“ค ํฌ๊ฒŒ ์ฐจ์ด๊ฐ€ ๋‚˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•˜๋Š”๋ฐ, ๊ทธ ์•ˆ์—์„œ ๋‚˜๋งŒ์˜ ์ฐจ๋ณ„์ ์„ ์–ด๋–ป๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์„์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

    ์ฐจ๋ณ„์ ์„ ์ฐพ๋Š” ๋ฐฉ์‹

    ๊ฐœ๋…์ฑ… ๋ณด๋‹ค๋Š” ํ”„๋กœ๋•ํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ผ~

    • ์‚ฌ์šฉ์ž๊ฐ€ ๋‚˜ ํ˜ผ์ž์ธ ๊ฒƒ๋„ ์ข‹๋‹ค. (๋‚ด๊ฐ€ ๋ถˆํŽธํ•œ ๊ฒƒ ๋งŒ๋“ค๋ฉด) ๋” ์ž์ฃผ ์œ ์šฉํ•œ ๊ฒฝํ—˜์„ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ!

    • ์›น์— ๋Œ€ํ•œ ์—”์ง€๋‹ˆ์–ด๋ง ์ ์ธ ์—ญ๋Ÿ‰์ด ๋›ฐ์–ด๋‚œ ๊ฒฝ์šฐ - ๊ธฐ์ˆ ์  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์—”์ง€๋‹ˆ์–ด (๋ผˆ๊ฐœ๋ฐœ์ž)

    • ์ตœ์†Œํ•œ์˜ ๊ธฐ์ˆ ๋กœ ์ข‹์€ ํ”„๋กœ๋•ํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ - ํ”„๋กœ๋•ํŠธ ์ ์ธ ์ธก๋ฉด์—์„œ ์ปค๋ฆฌ์–ด๋ฅผ ์Œ“๊ธฐ

    • ํ’€์Šคํƒ - ์„œ๋น„์Šค๊ฐ€ ๋™์ž‘๋˜๊ธฐ ์œ„ํ•œ ์ธํ”„๋ผ, ๋ฐฑ์—”๋“œ, ๊ธฐํš์ž ๋“ฑ์˜ ํ˜‘์—…์„ ์ž˜ ํ•ด๋‚˜๊ฐ€๋Š” ๊ฒฝ์šฐ

    โ†’ ๋ฆด๋ฆฌ์ฆˆ ๋˜์ง€ ์•Š๋Š” ํ”„๋กœ๋•ํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ง€ ์•Š์œผ๋ฉด 3๊ฐ€์ง€ ์˜์—ญ ๋‹ค ๊ฒฝํ—˜ํ•ด๋ณด์ง€ ๋ชปํ•œ๋‹ค.

  4. ๊ณต๋ถ€๋ฅผ ํ•  ๋•Œ ๋„์›€์„ ๋ฐ›๋Š” ๊ฒŒ ์ข‹์„์ง€, ํ˜ผ์ž์„œ ๋๊นŒ์ง€ ์ฐพ์•„๋ณด๋Š”๊ฒŒ ์ข‹์€์ง€

    • ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •์„ ํšจ์œจ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์—ฌ๋Ÿฌ ๋„์›€์„ ๋ฐ›๋Š”๊ฒŒ ๋” ํšจ๊ณผ์ ์ธ ๊ฒƒ ๊ฐ™๋‹ค.
    • ์™œ๋ƒ ์šฐ๋ฆฌ๋Š” ์•„์ง ๋„ˆ๋ฌด ๋ชจ๋ฅด๋Š” ๊ฒƒ์ด ๋งŽ๋‹ค.

    ๋‚˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋•Œ ์–ด๋–ป๊ฒŒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด ๋‚˜๊ฐ€๋Š”๊ฐ€? ์‹œํ€€์Šค๋ฅผ ์ฐพ์•„๋ณด๊ธฐ

  5. ์ด๋Ÿฐ ์‚ฌ๋žŒ์ด ์ „๋ฌธ์„ฑ์„ ๊ฐ€์ง„ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ๋˜๋”๋ผ! ์–ด๋–ค ํŠน์ง•์ด ์žˆ๋Š”๊ฐ€?

    • ์ž˜ํ•˜๋Š” ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž์ผ ์ˆ˜๋ก ์ƒ๊ฐ๋ณด๋‹ค ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋„์›€ ์š”์ฒญ์„ ์ž˜ํ•œ๋‹ค.
    • ๋ฉ์–ด๋ฆฌ๋กœ ๋˜์–ด์žˆ๋Š” ์š”๊ตฌ์‚ฌํ•ญ์„ ์ž˜ ์ชผ๊ฐœ๋Š” ๋Šฅ๋ ฅ. ๋ฌธ์ œ ํ•ด๊ฒฐ์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ž˜ ์ˆ˜๋ฆฝํ•˜๋Š” ์‚ฌ๋žŒ
      • ํ•˜์ง€๋งŒ, ํ˜ผ์ž์„œ ์ˆ˜๋ฆฝํ•˜๊ธฐ๋Š” ํž˜๋“ค๋ฉฐ ๋งŽ์ด ๋ฌผ์–ด๋ด์•ผํ•œ๋‹ค.
    • ์š”๊ตฌ์‚ฌํ•ญ์„ ์ž˜ ๋ถ„์„ํ•˜๋Š” ์—”์ง€๋‹ˆ์–ด์˜ ํŠน์ง•์€? - ๊ธฐํš์ž, ๋””์ž์ด๋„ˆ์™€ ์นœํ•˜๋‹ค ใ…‹ใ…‹ใ…‹
      • ์ž˜๋˜๊ณ  ์žˆ์–ด๋„, ์ž˜ ์•ˆ๋˜๊ณ  ์žˆ์–ด๋„ ํ•ญ์ƒ ์†Œํ†ตํ•˜๋ฉด์„œ ๊ทธ๋“ค์—๊ฒŒ ์ง„ํ–‰์‚ฌํ•ญ์„ ๊ณต์œ ํ•˜๋ผ
    • ํ˜„์‹ค์„ธ๊ณ„์˜ ๋ฌธ์ œ๋Š” ๋ถˆํ™•์‹ค์„ฑ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”ํƒ€ ์ธ์ง€๊ฐ€ ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†Œํ”„ํŠธ ๊ธฐ์ˆ ์ด ์ค‘์š”ํ•˜๋‹ค
  6. ์ง€์น˜์ง€ ์•Š๊ณ  ๊ณต๋ถ€ํ•˜๋Š” ๋ฐฉ๋ฒ•?

    ๊ฐ™์ดํ•˜๋ฉด ์•ˆ์ง€์นจ

  7. ํ”„๋กœ์ ํŠธ ๋ฒ„๊ทธ๊ฐ€ ๋„ˆ๋ฌด ์‚ฌ์†Œํ•œ ๊ฒƒ ๋ฐ–์— ์•ˆ๋‚˜์˜ค๋Š”๋ฐ, ํ”„๋กœ์ ํŠธ๋ฅผ ๊ด€์ฒ ํ•˜๋Š” ํŠน๋ณ„ํ•œ ๋ฌธ์ œํ•ด๊ฒฐ์„ ๊ฒฝํ—˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด๋–ค ์ค€๋น„๊ฐ€ ํ•„์š”ํ• ์ง€?

    • ๊ทธ๋ž˜์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค.
    • ์‚ฌ์šฉ์ž์˜ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์œผ๋ฉด์„œ ๊ทธ๊ฑธ ์ž˜ ํ’€์–ด๋‚ด๊ณ  ๋น ๋ฅด๊ฒŒ ๋‹ค์‹œ ์ข‹๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•œ ์—ญ๋Ÿ‰์ด๋‹ค.
  8. ํ•œ๋‹ฌ ์ „์— ์ ์—ˆ๋˜ ๊ธ€์„ ๋‹ค์‹œ ๋ณด๋ฉด ์ธ์‚ฌ์ดํŠธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

    • ๋ชจ๋ฅด๋Š” ๊ฒƒ์„ ์ •๋ฆฌํ•ด ๋‘๊ณ , ๋ฏธ๋ž˜์˜ ๋‚˜์—๊ฒŒ ๋ฌผ์–ด๋ณด๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.
    • ๋ชจ๋ฅด๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์ง€๋„๋ฅผ ๋งŒ๋“ค๊ธฐ. ์‹ค์ˆ˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งŒ๋“ค๊ธฐ
๐Ÿ’ก ๋‚ด๊ฐ€ ์–ด๋–ค ๊ฐ€์น˜๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๊ณ  ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์ธ๊ฐ€?
  1. ์‚ฝ์งˆํ•˜๋‹ค๊ฐ€ โ€œ๊ฒฐ๊ตญ ๋‚ด๊ฐ€ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๊ฒƒ์€ ๋ญ์ง€?โ€๋ผ๋Š”์งˆ๋ฌธ์„ ๋‹ค์‹œ ํ•˜๊ธฐ!!!!

    • ๋ชฉํ‘œ๊ฐ€ ์ถ”์ƒ์ ์ด๊ณ , ๋„ˆ๋ฌด ํฌ๋ฉด ํž˜๋“ค๋‹ค. ์ชผ๊ฐœ๊ธฐ๊ฐ€ ๊ฐ€์žฅ ์ค‘์š”. ์–ด๋–ค validation์„ ํ•ด์•ผํ•˜๋Š” ๊ฒƒ์ธ์ง€ ์ธ์ง€๋ฅผ ํ•˜๋ฉด์„œ ์‚ฝ์งˆํ•˜๊ธฐ
  2. ์˜์–ด ..ใ…‹ใ…‹ใ…‹ใ…‹

    • ํ•ญ์ƒ ์˜์–ด๊ฐ€ ์–ด๋ ค์šด๋ฐ.. ใ… ใ…  ๋”ฎ์—˜ ์–˜๊ธฐ๋ฅผ ๋˜ ํ•ด์ฃผ์…จ๋‹ค ใ…Žใ…Ž ํ—คํ—ค ^^
    • ์ฒ˜์Œ์œผ๋กœ ์˜์–ด ๋ณด๋‹ค๋Š” ๋ฌธ์ œํ•ด๊ฒฐ์— ์ง‘์ค‘ํ•˜๋ผ๋Š” ๋‹ต๋ณ€์„ ํ•ด์ฃผ์‹  ๋ฉ˜ํ† ๋ถ„์ด์—ˆ๋‹ค. ๋‹ค๋“ค ์˜์–ด๋Š” ํ•„์ˆ˜ ์—ญ๋Ÿ‰์ด๊ณ  ์–ด์ฉ”์ˆ˜ ์—†์ด ๊ณต๋ถ€ํ•ด์•ผ์ง€.. ํ•˜์…จ๋Š”๋ฐ ใ…‹ใ…‹ใ…‹ .. ๋“œ!๋””!์–ด! ์ฒ˜์Œ์œผ๋กœ ์ง€๊ธˆ์€ ์˜์–ด๋ณด๋‹ค๋Š” ํ•™์Šต์— ์ง‘์ค‘ํ•˜๋ผ๋Š” ๋‹ต๋ณ€์„ ๋ฐ›์•˜๋‹ค><
    • ๋ฌผ๋ก  ์„ฑ์žฅํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๋ ค๋ฉด ์˜์–ด๋ผ๋Š” ํˆด์„ ์ž˜ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.ใ…Žใ…Ž ^^
  3. Devfolio

    • ๊ฐœ๋ฐœ์ž์ด ์˜ฌ๋ฆฌ๋Š” ํฌํŠธํด๋ฆฌ์˜ค๋ฅผ ๋งŽ์ด ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค(์‚ฌ์ด๋“œ ํ”Œ์  ๋งŽ์ด ์ฐพ์„ ์ˆ˜ ์žˆ์Œ!)
  4. ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œ ์ •ํ•˜๊ธฐ

    • ๊ฒ€์€์ƒ‰ ์ง€๋Œ€ - ๋„์ €ํžˆ ๋ชจ๋ฅด๊ฒ ๋‹ค
    • ํšŒ์ƒ‰ ์ง€๋Œ€ - ์•„๋ฆฌ๊นŒ๋ฆฌ?!
    • ํฐ์ƒ‰ ์ง€๋Œ€ - ์–ด๋–ป๊ฒŒ ํ’€์ˆ˜ ์žˆ๋Š”์ง€ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์ด ๋˜๋Š” ๋ฌธ์ œ
  • ํšŒ์ƒ‰ ์ง€๋Œ€์— ์žˆ๋Š” ๋ฌธ์ œ๋“ค์„ ํ•˜๋ฃจ์— ํ•œ๊ฐœ or ์ผ์ฃผ์ผ์— 2~3๊ฐœ ์ •๋„ ํ’€์–ด๋ณธ๋‹ค.
  • ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ 2~3๋ฒˆ ํ’€์–ด๋ณธ๋‹ค.

์˜ค๋Š˜์˜ ๋‚˜๋Š” ๋ฌด์—‡์„ ์ƒˆ๋กญ๊ฒŒ ๋ฐฐ์› ๋‚˜์š”?

[1] ์ž…๋ ฅํผ ๋‹ค๋ฃจ๊ธฐ

const handleTitleChange = (e) => {
    setTitle(e.target.value);
  };
<input value={state} onChange={handleTitleChange}></input>

state๊ฐ€ input์˜ value์— ๋ฐ˜์˜๋˜๊ณ  handleTitleChange๋ผ๋Š” ํ•ธ๋“ค๋Ÿฌ๋Š” onChange ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ๋ ๋•Œ๋งˆ๋‹ค ์‹คํ–‰๋Š”๋ฐ, ๊ทธ ๋‚ด๋ถ€์—์„œ๋Š” setter๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

์ด๋•Œ onChange prop์€๋Š” html ์š”์†Œ์˜ oninput ์ด๋ฒคํŠธ์™€ ๊ฐ™์€๋ฐ, ์ž…๋ ฅ๊ฐ’์ด ๋ฐ”๋€”๋•Œ ๋งˆ๋‹ค ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ์ด๋‹ค. (html์˜ onchange์™€๋Š” ๋‹ค๋ฅด๋‹ค)

HTML๊ณผ ๋‹ค๋ฅธ ์ 

  1. onChange

๋ฆฌ์•กํŠธ์—์„  HTML๊ณผ ๋‹ค๋ฅด๊ฒŒ onChange Prop์„ ์‚ฌ์šฉํ•˜๋ฉด ์ž…๋ ฅ ๊ฐ’์ด ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. oninput ์ด๋ฒคํŠธ์™€ ๊ฐ™๋‹ค

  1. htmlFor

<label /> ํƒœ๊ทธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์†์„ฑ์ธ for ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐ˜๋ณต๋ฌธ ํ‚ค์›Œ๋“œ์ธ for ์™€ ๊ฒน์น˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์•กํŠธ์—์„œ๋Š” htmlFor ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

onSubmit

html์˜ form ํƒœ๊ทธ์˜ ๊ธฐ๋ณธ ๋™์ž‘์€ submit ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ, ์ž…๋ ฅ ํผ์˜ ๊ฐ’๊ณผ ํ•จ๊ป˜ GET request๋ฅผ ๋ณด๋‚ธ๋‹ค(๊ทธ๋ฆฌ๊ณ  ์ƒˆ๋กœ๊ณ ์นจ)

Controlled Component

** state๊ฐ€ input์˜ value์— ๋ฐ˜์˜๋˜๊ณ 

โ†’ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์„ Controlled Component๋ผ๊ณ  ํ•œ๋‹ค

  • ์ธํ’‹์˜ value๊ฐ’์„ ๋ฆฌ์•กํŠธ์—์„œ ์ง€์ •
  • ๋ฆฌ์•กํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ’๊ณผ ์‹ค์ œ ์ธํ’‹ ๊ฐ’์ด ํ•ญ์ƒ ์ผ์น˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™์ž‘๋ฅผ ์˜ˆ์ธกํ•˜๊ธฐ ์‰ฝ๊ณ  input๊ฐ’์„ ์—ฌ๋Ÿฌ๊ตฐ๋ฐ์—์„œ ์‰ฝ๊ฒŒ ๋ฐ”๊ฟ€์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ์–ด ๊ถŒ์žฅ๋œ๋‹ค.
  • ๋น„์ œ์–ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋Š”๋ฐ, ๋Œ€๋ณด์ ์œผ๋กœ File Input์ด ์žˆ๋‹ค.
    • ์ธํ’‹ ํƒœ๊ทธ์˜ value ์†์„ฑ์„ ๋ฆฌ์•กํŠธ์—์„œ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.

file input์€ ์ œ์–ด ์ปดํฌ๋„ŒํŠธ๋กœ ์‚ฌ์šฉํ•˜๋ฉด error๊ฐ€ ์ƒ๊ธด๋‹ค!
file input์˜ value ์†์„ฑ์€ ์‚ฌ์šฉ์ž๋งŒ ์ง์ ‘ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๊ณ , javascript๋Š” ๋นˆ๋ฌธ์ž์—ด๋กœ๋งŒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ (์ฆ‰ ์ดˆ๊ธฐํ™”๋Š” ๊ฐ€๋Šฅ)

ref

์›ํ•˜๋Š” ์‹œ์ ์— ์‹ค์ œ DOM๋…ธ๋“œ์— ์ ‘๊ทผํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” prop

ref ๊ฐ์ฒด

const inputRef = useRef()
// ...
return <input type="file" onChange={handleChange} ref={inputRef} />;
  • console.log(inputRef)๋ฅผ ํ•˜๊ฒŒ๋˜๋ฉด current ํ”„๋กœํผํ‹ฐ๊ฐ€ ์žˆ๊ณ , FileInput์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • DOM๋…ธ๋“œ๋Š” ๋ Œ๋”๋ง์ด ๋๋‚ฌ์„ ๋•Œ๋งŒ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ref ๊ฐ์ฒด์˜ current ๊ฐ’๋„ ํ™”๋ฉด์— ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง ๋์„ ๋•Œ๋งŒ ์กด์žฌํ•˜๋Š” ์ ์„ ์œ ์˜!
    • ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง ๋“ฑ์„ ํ–ˆ์„ ๋•Œ ์—†์„์ง€๋„ ๋ชจ๋ฅด๋‹ˆ๊นŒ if๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ํ•ด์ค˜์•ผํ•จ

objectURL ๋งŒ๋“ค๊ธฐ

URL.createObjectURL(file)์ด๋ผ๋Š” ํ•จ์ˆ˜๋กœ ์ƒ์„ฑ ๊ฐ€๋Šฅ . ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ž์—ด๋กœ ํ•ด๋‹นํŒŒ์ผ์˜ ์ฃผ์†Œ์ฒ˜๋Ÿผ ์“ธ ์ˆ˜ ์žˆ์Œ

  • blob์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ž„์‹œ ์ƒ์„ฑ ์ฃผ์†Œ๊ฐ€ ์ƒ์„ฑ๋จ
  • objectURL์„ ๋งŒ๋“ค๋ฉด ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ณ  ํŒŒ์ผ์— ํ•ด๋‹นํ•˜๋Š” ์ฃผ์†Œ๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.

์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ

๋„คํŠธ์›Œํฌ ๋ฆฌํ€˜์ŠคํŠธ๋‚˜, ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๊ฐ™์ด ์ปดํฌ๋„ŒํŠธ ํ•จ์ˆ˜์—์„œ ์™ธ๋ถ€์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋ผ๊ณ  ํ•œ๋‹ค. ์ด๋ฅผ ์ •๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด useEffect๋ฅผ ํ™œ์šฉํ•œ๋‹ค.

[2] update function ์™„๋ฒฝ ์ดํ•ด

setย functions, likeย setSomething(nextState)

useState๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” set ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ƒํƒœ๋ฅผ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ๋ Œ๋”๋ง์„ ๋‹ค์‹œ ํŠธ๋ฆฌ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์Œ ์ƒํƒœ๋ฅผ ์ง์ ‘ ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜ ์ด์ „ ์ƒํƒœ์—์„œ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค:

const [name, setName] = useState('Edward');

function handleClick() {  
	setName('Taylor');  // ์ƒํƒœ๋ฅผ ์ง์ ‘ ์ „๋‹ฌ
	setAge(a => a + 1);  // ์ด์ „ ์ƒํƒœ์—์„œ ๊ณ„์‚ฐํ•˜๋Š” ์ฝœ๋ฐฑ ์ „๋‹ฌ
}

setter์˜ ์ฆ‰, ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ nextState(์ƒํƒœ๊ฐ€ ๋˜๊ธธ ์›ํ•˜๋Š” ๊ฐ’)์„ ์ „๋‹ฌํ•˜๋ฉด ๋œ๋‹ค.

๋ชจ๋“  type์˜ ๊ฐ’์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•จ์ˆ˜(=์ฝœ๋ฐฑ)๊ฐ€ ๋“ค์–ด๊ฐ€๋ฉด ํŠน๋ณ„ํ•œ ๋™์ž‘์„ ํ•˜๋Š”๋ฐ, ์ด๋ฅผ updater function์ด๋ผ ํ•œ๋‹ค.

ํ•จ์ˆ˜๋ฅผ nextState๋กœ ์ „๋‹ฌํ•˜๋ฉด updater function๋กœ ์ทจ๊ธ‰๋œ๋‹ค.

โš ๏ธ updater function ๊ทœ์น™!

์ด ํ•จ์ˆ˜๋Š” ์ˆœ์ˆ˜ํ•ด์•ผ ํ•˜๊ณ , ๋ณด๋ฅ˜ ์ค‘์ธ state๋ฅผ ์œ ์ผํ•œ argument๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ, ๋‹ค์Œ ์ƒํƒœ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.

React๋Š” updater function์„ queue์—๋„ฃ๊ณ  ์ปดํฌ๋„ŒํŠธ๋ฅผ re-renderingํ•œ๋‹ค. ๋‹ค์Œ ๋ Œ๋”๋ง ์ค‘์— React๋Š” queue์— ์žˆ๋Š” ๋ชจ๋“  updater ๋ฅผ ์ด์ „ state์— ์ ์šฉํ•˜์—ฌ ๋‹ค์Œ state๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

โ‘ React๋Š” state update๋ฅผ ์ผ๊ด„ ์ฒ˜๋ฆฌ(batch)ํ•œ๋‹ค. โ‘ก๋ชจ๋“  event handler๊ฐ€ ์‹คํ–‰๋œ ๋’ค, set function์„ ํ˜ธ์ถœํ•œ ํ›„์— ํ™”๋ฉด์„ updateํ•œ๋‹ค. โ‘ข์ด๋Ÿฌ๋ฉด single event ์ค‘์— ์—ฌ๋Ÿฌ๋ฒˆ rerendering์ด ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•œ๋‹ค.

class Example extends React.Component {
  state = { count: 0 }

  handleClick = () => {
    this.setState({ count: this.state.count + 1 })
    this.setState({ count: this.state.count + 1 })
		console.log(this.state.count)
  }

  render() {
    console.log('render called')
    return (
      <button onClick={this.handleClick}>
        Click me ({this.state.count})
      </button>
    )
  }
}

๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด handleClick() ๋Š” ๋‹ค๋ฅธ count ๊ฐ’์œผ๋กœ setState๋ฅผ ๋‘ ๋ฒˆ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ React๋Š” ์ด ๋‘ ํ˜ธ์ถœ์„ โ‘ batchํ•ด ํ•œ ๋ฒˆ์˜ ์—…๋ฐ์ดํŠธ์— ๋ชจ๋‘ ์ ์šฉํ•˜๋ฏ€๋กœ ์ปดํฌ๋„ŒํŠธ๋Š” ํ•œ ๋ฒˆ๋งŒ ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜๊ณ  ์นด์šดํŠธ ๊ฐ’์€ 2๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. โ‘ก์ด๋•Œ console.log๋กœ ์ถœ๋ ฅ๋˜๋Š” ๊ฐ’์€ 1์ด๋‹ค. ๊ทธ ์ด์œ ๋Š”, state update๊ฐ€ event handler๊ฐ€ ๋ชจ๋‘ ์‹คํ–‰ ๋œ ํ›„ set function์„ ํ˜ธ์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ณต๋ถ€ํ•˜๋ฉด์„œ ์–ด๋–ค ์–ด๋ ค์›€์ด ์žˆ์—ˆ๋‚˜์š”?

1. ์žฌ๋ Œ๋”๋ง ์ด์Šˆ

import { useState, useEffect } from "react";

export default function App() {
  const [count, setCount] = useState(0);

  const handleOneCount = () => {
    setCount(1);
  };
  const handleZeroCount = () => {
    setCount(0);
  };

  console.log(count);

  return (
    <div className="App">
      <h2>{count}</h2>
      <button onClick={handleOneCount}>1๋กœ ๋งŒ๋“ค๊ธฐ</button>
      <button onClick={handleZeroCount}>0์œผ๋กœ ๋งŒ๋“ค๊ธฐ</button>
    </div>
  );

์ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ, 1๋กœ ๋งŒ๋“ค๊ธฐ ๋ฒ„ํŠผ์ด๋‚˜ 0์œผ๋กœ ๋งŒ๋“ค๊ธฐ ๋ฒ„ํŠผ์„ ์—ฐ์†์œผ๋กœ ํด๋ฆญํ•˜๋ฉด console.log(count)๊ฐ€ 2๋ฒˆ ๋ฐœ์ƒํ•˜๊ณ , 3๋ฒˆ์งธ ๋ถ€ํ„ฐ๋Š” ์ถœ๋ ฅ์ด ์•ˆ๋˜๋Š” ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

์ฆ‰, ์ฒ˜์Œ ๊ฐ’์„ 0์œผ๋กœ ํ•ด๋’€๊ณ , ์ตœ์ดˆ ๋ Œ๋”๋ง๋•Œ๋Š” ๋‹น์—ฐํžˆ 0์ด ์ฝ˜์†”์ด ์ฐํžŒ๋‹ค. ๊ทธ ํ›„, 0์œผ๋กœ ๋งŒ๋“ค๊ธฐ๋ฅผ ๋ˆ„๋ฅด๋ฉด state๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š์•„์„œ ์ฝ˜์†”์— ์•„๋ฌด๋Ÿฐ ๋ณ€ํ™”๊ฐ€ ์—†๋‹ค.
๋‹ค์Œ์œผ๋กœ 1๋กœ ๋งŒ๋“ค๊ธฐ ๋ฒ„ํŠผ์„ ํ•œ๋ฒˆ ๋ˆ„๋ฅด๋ฉด state๊ฐ€ ๋ณ€ํ•˜๊ณ  ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋•Œ console๋„ ์‹คํ–‰์ด ๋˜์–ด์„œ 1์ด ์ถœ๋ ฅ๋œ๋‹ค. โ›” ๋ฌธ์ œ๋Š” ์ด๊ณณ!
ํ•œ๋ฒˆ ๋” 1๋กœ ๋งŒ๋“ค๊ธฐ๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ, state๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š์•˜๋Š”๋ฐ ๋˜ 1์ด ์ถœ๋ ฅ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ๋˜ ํ•œ๋ฒˆ 1๋กœ ๋งŒ๋“ค๊ธฐ์„ ๋ˆ„๋ฅด๋ฉด(์ฆ‰ 2๋ฒˆ ์ด์ƒ ๋ˆ„๋ฅด๋ฉด) ์ฝ˜์†”์ด ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.(์ฆ‰ ์ถœ๋ ฅ์ด ์—†๋‹ค)

์ด์œ ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ๋งŽ์€ ๊ตฌ๊ธ€๋ง์„ ํ–ˆ๊ณ , "React console twice"์™€ ๊ฐ™์€ ํ‚ค์›Œ๋“œ๋กœ ์ฐพ์•„๋ณด์•˜๋Š”๋ฐ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ถ”์ธกํ•œ ๊ฒƒ์€

<strict mode ๊ฐ€ ์›์ธ์ด๋‹ค> ์˜€๋‹ค.
โ†’ strict ๋ชจ๋“œ๋Š” ์˜ˆ์ •๋œ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š”๋ฐ ๋งค์šฐ ๋„์›€์ด ๋œ๋‹ค

<React.StrictMode>
    <App />
  </React.StrictMode>

์ด ๋ถ€๋ถ„์˜ wrapping์„ ์ฃผ์„์ฒ˜๋ฆฌํ•˜๋ฉด strict mode๊ฐ€ ์•„๋‹ˆ๊ฒŒ ๋˜์–ด์„œ ๋‹ค์‹œ 1๋ฒˆ๋งŒ ์ถœ๋ ฅ๋œ๋‹ค.

์ง์ ‘ ์‹คํ—˜๊ฒฐ๊ณผ, ์ด๊ฑด ์•„์˜ˆ ํด๋ฆญ 1๋ฒˆ์— 2๋ฒˆ ์ถœ๋ ฅ์ด ๋˜๋Š” ๊ฒƒ. ๋‹ค๋ฅธ ๊ฒฝ์šฐ์ด๋‹ค.

์ด ๊ฐ€์„ค์„ ์ฆ๋ช…ํ•˜๋ฉด์„œ ์ด๋Ÿฐ์ €๋Ÿฐ ์ž๋ฃŒ๋ฅผ ์Šต๋“ํ•œ ๊ฒฐ๊ณผ, rendering๊ณผ running์ด ๋‹ค๋ฆ„์„ ๊ผญ ์ธ์ง€ํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

๋‚˜์˜ ์˜๋ฌธ์€ "ํด๋ฆญ์„ 1ํšŒํ•˜๊ณ , ๋˜ 1ํšŒํ–ˆ์„ ๋•Œ state๊ฐ€ ๋ฐ”๋€Œ์ง€ ์•Š์œผ๋ฉด ๋ Œ๋”๋ง์ด ์ผ์–ด๋‚˜์ง€ ์•Š์•„์„œ 2๋ฒˆ์งธ๋•Œ๋Š” ์ฝ˜์†”์ด ์ฐํžˆ๋ฉด ์•ˆ๋˜๋Š” ๊ฒƒ ์•„๋‹Œ๊ฐ€?!" ์˜€๋Š”๋ฐ, ์ด ๋ช…์ œ ์ž์ฒด๊ฐ€ ์ž˜๋ชป๋œ ๊ฒƒ์ด์—ˆ๋‹ค.

funtional component ์—์„œ ๋ฆฌํ„ด์ „์— console.log()๋ฅผ ๋„ฃ์œผ๋ฉด ๋ฆฌ๋ Œ๋”๋ง ์‹œ์— ์ฝ˜์†”์ด ์ฐํžŒ๋‹ค๋Š” ๋งž๋Š” ๋ง์ด์ง€๋งŒ, ์ฝ˜์†”๋กœ๊ทธ๊ฐ€ ์ฐํžˆ๋ฉด component ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง์ด ๋œ๊ฒƒ์€ ์•„๋‹ˆ๋ผ๋Š” ๋ง์ด๋‹ค. ์ฆ‰, ์ปดํฌ๋„ŒํŠธ๊ฐ€ running๋˜๋ฉด console.log()๋Š” ์ฐํžˆ๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด, ์ปดํฌ๋„ŒํŠธ running ๊ณผ rendering์˜ ์ฐจ์ด๋Š”?

  • ์‹คํ–‰(running)์€ ์ปดํฌ๋„ŒํŠธ์™€ ์—ฐ๊ด€๋œ ๋ฉ”์„œ๋“œ ๋ฐ ํ•จ์ˆ˜๋‚˜ ํ›…์˜ ์‹คํ–‰์„ ์˜๋ฏธํ•œ๋‹ค.
  • ๋ Œ๋”๋ง์€ ์ปดํฌ๋„ŒํŠธ์˜ ์‹œ๊ฐ์  ์ถœ๋ ฅ์„ ์ƒ์„ฑํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ด๋Š” Virtual DOM์— ์˜ํ•ด ๋น„๊ต๋˜๋ฉฐ state์— ๋ณ€ํ™”๊ฐ€ ์žˆ์—ˆ์„ ๋•Œ ๋ฆฌ๋ Œ๋”๋ง์ด ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด running์€ ์–ธ์ œ ๋ฐœ์ƒํ•˜๋Š”๋ฐ?
์—ฌ๊ธฐ์„œ ๋ง‰ํ˜”๋‹ค.. ์™œ 2๋ฒˆ์งธ ํด๋ฆญ๋•Œ๋Š” state๊ฐ€ ์•ˆ๋ณ€ํ–ˆ์œผ๋ฉด์„œ ์ฝ˜์†”์ด ์ฐํžˆ๋ฉด์„œ, 3๋ฒˆ์งธ ์ด์ƒ ํด๋ฆญ์‹œ ์ฝ˜์†”์ด ์•ˆ์ฐํž๊นŒ.. ๋” ์ฐพ์•„๋ณด๊ณ  ์•Œ๊ฒŒ๋˜๋ฉด ํฌ์ŠคํŒ…ํ•˜๊ฒ ๋‹ค.

2. useState์˜ setter ๋ถ„์„..

์†Œ์Šค ์ฝ”๋“œ ๋ถ„์„์„ ์•„์ง ing ์ค‘์ด๋‹ค.
์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ๋œ ์ ์€
๋ฆฌ์•กํŠธ ํŒจํ‚ค์ง€์—๋Š” ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ํฌํ•จ๋˜์–ด ์žˆ๋”ฐ๋Š” ์ ! ์ผ๋ฐ˜์ ์œผ๋กœ ์›น์šฉ react-dom ๋˜๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ํ™˜๊ฒฝ์šฉ react-native์™€ ๊ฐ™์€ React ๋ Œ๋”๋Ÿฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋œ๋‹ค๊ณ  readme์— ๋‚˜์™€์žˆ๋‹ค.

๋”ฐ๋ผ์„œ useState๊ฐ€ ์ •์˜๋œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ํƒ€๊ณ  ํƒ€๊ณ  ํƒ€๊ณ ..

๋งˆ์ง€๋ง‰ ๋„์ฐฉ์ง€๊ฐ€ ReactCurrentDispatcher.js ์ธ๋ฐ, ๊ฐ์ฒด ํ•˜๋‚˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋์ด ๋‚ฌ๋‹ค.

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

๋”ฐ๋ผ์„œ ํ›… ๋‚ด๋ถ€ ๋™์ž‘์„ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” Reconciler๋ฅผ ๋œฏ์–ด๋ด์•ผ ํ•จ์„ ๊นจ๋‹ฌ์€ ํ•˜๋ฃจ์˜€๋‹ค!

์ฐธ๊ณ ๋กœ ์ด ๋ธ”๋กœ๊ทธ๋ฅผ ๋ณด๋ฉด์„œ ๋ถ„์„ ์ค‘์ด๋‹ค. but React 16๋ฒ„์ „ ๊ธฐ์ค€์ด๋ผ 18๋ฒ„์ „์ธ ํ˜„์žฌ์™€๋Š” ์‚ด์ง์˜ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.(๋ฌผ๋ก  useState ๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ์ ์œผ๋กœ ๋‹ค๋ฅธ ์ ์€ ์—†์ง€๋งŒ, ์ถ”์ƒํ™”๊ฐ€ ๋” ๋งŽ์ด ์ง„ํ–‰๋˜์–ด์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋” ๋ถ„์„ํ•˜๊ธฐ ๊นŒ๋‹ค๋กœ์›€ ..ใ…‹)

๋‚ด์ผ์˜ ๋‚˜๋Š” ๋ฌด์—‡์„ ๊ณต๋ถ€ํ•ด์•ผ ํ• ๊นŒ์š”?

  • ๋ฆฌ์•กํŠธ ๋ฐ์ดํ„ฐ ๋‹ค๋ฃจ๊ธฐ ์™„๊ฐ•
    • ์ƒ๊ฐ๋ณด๋‹ค ์ง„๋„๊ฐ€ ์•ˆ๋‚˜๊ฐ€๊ณ ์žˆ๋‹ค. ์ด์œ ๋Š” ๊ณต์‹๋ฌธ์„œ๋ฅผ ์™„๋…ํ•˜๊ณ  ์‹ถ์€ ๋‚˜์˜ ์š•์‹ฌ ๋•Œ๋ฌธ..?! ๋‚ด์ผ์€ ๊ผญ ํ•œ๋ฒˆ ํ›‘๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ ๋ฌธ์„œ๋ฅผ ์ฝ๋Š” ๊ฒƒ์œผ๋กœ ๋ฐฉ๋ฒ•์„ ๋ฐ”๊พธ๊ณ ์žํ•œ๋‹ค.
  • level3 ์•Œ๊ณ ๋ฆฌ์ฆ˜ 1๋ฌธ์ œ

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