[React] ๐Ÿ“š ํผ๊ณผ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌํ•˜๊ธฐ

pyeonneยท2022๋…„ 6์›” 27์ผ
0
post-thumbnail

๐Ÿ“‹ ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ

  • React state๋ฅผ "์‹ ๋ขฐ ๊ฐ€๋Šฅํ•œ ๋‹จ์ผ ์ถœ์ฒ˜(single source of truth)"๋กœ ๋งŒ๋“ค์–ด ๋‘ ์š”์†Œ๋กœ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ Reac์— ์˜ํ•ด ๊ฐ’์ด ์ œ์–ด๋˜๋Š” ์ž…๋ ฅ ํผ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ "์ œ์–ด ์ปดํฌ๋„ŒํŠธ(controlled component)"๋ผ๊ณ  ํ•œ๋‹ค.
  • ์ „๋ฐ˜์ ์œผ๋กœ <input type="text">, <textarea> ๋ฐ <select> ๋ชจ๋‘ ๋งค์šฐ ๋น„์Šทํ•˜๊ฒŒ ๋™์ž‘ํ•œ๋‹ค. ๋ชจ๋‘ ์ œ์–ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ value ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค.
  • ์—ฌ๋Ÿฌ input ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ œ์–ดํ•ด์•ผํ•  ๋•Œ, ๊ฐ ์—˜๋ฆฌ๋จผํŠธ์— name ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  event.target.name ๊ฐ’์„ ํ†ตํ•ด ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์–ด๋–ค ์ž‘์—…์„ ํ•  ์ง€ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.
  • ์ฃผ์–ด์ง„ input ํƒœ๊ทธ์˜ name์— ์ผ์น˜ํ•˜๋Š” state๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด ES6์˜ computed property name ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.
  • ๋Œ€๋ถ€๋ถ„ ๊ฒฝ์šฐ์— ํผ์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์ œ์–ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  • ๋ชจ๋“  state ์—…๋ฐ์ดํŠธ์— ๋Œ€ํ•œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋Œ€์‹  ๋น„์ œ์–ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ref๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DOM์—์„œ ํผ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
  • Ref์˜ ๋ฐ”๋žŒ์งํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    • ํฌ์ปค์Šค, ํ…์ŠคํŠธ ์„ ํƒ์˜์—ญ, ํ˜น์€ ๋ฏธ๋””์–ด์˜ ์žฌ์ƒ์„ ๊ด€๋ฆฌํ•  ๋•Œ.
    • ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ง์ ‘์ ์œผ๋กœ ์‹คํ–‰์‹œํ‚ฌ ๋•Œ.
    • ์„œ๋“œ ํŒŒํ‹ฐ DOM ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ React์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•  ๋•Œ.
  • ์„ ์–ธ์ ์œผ๋กœ ํ•ด๊ฒฐ๋  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์—์„œ๋Š” ref ์‚ฌ์šฉ์„ ์ง€์–‘ํ•ด์•ผ ํ•œ๋‹ค.
  • ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์˜ ref๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ref forwarding์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • useRef๋Š” .current ํ”„๋กœํผํ‹ฐ๋กœ ์ „๋‹ฌ๋œ ์ธ์ž(initialValue)๋กœ ์ดˆ๊ธฐํ™”๋œ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ref ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋ฐ˜ํ™˜๋œ ๊ฐ์ฒด๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ์ „ ์ƒ์• ์ฃผ๊ธฐ๋ฅผ ํ†ตํ•ด ์œ ์ง€๋œ๋‹ค.
  • useRef๋กœ ๋งŒ๋“  ๊ฐ€๋ณ€๊ฐ’์€ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์–ด๋„ ๋ฆฌ๋ Œ๋”๋ง์„ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.
  • React๊ฐ€ DOM ๋…ธ๋“œ์— ref๋ฅผ attachํ•˜๊ฑฐ๋‚˜ detachํ•  ๋•Œ ์–ด๋–ค ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋Œ€์‹  ์ฝœ๋ฐฑ ref๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • ์ฝœ๋ฐฑ ref๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž์‹ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‚˜์ค‘์— ์ธก์ •๋œ ๋…ธ๋“œ๋ฅผ ํ‘œ์‹œํ•˜๋”๋ผ๋„ (์˜ˆ: ํด๋ฆญ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ) ์—ฌ์ „ํžˆ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ด์— ๋Œ€ํ•œ ์•Œ๋ฆผ์„ ๋ฐ›๊ณ  ์ธก์ •์„ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ”— ์ฐธ๊ณ  ๋ž˜ํผ๋Ÿฐ์Šค

profile
๊ฑด๊ฐ•ํ•œ ๋ชธ๊ณผ ๋งˆ์Œ์—์„œ ๊ฑด๊ฐ•ํ•œ ์ฝ”๋“œ๊ฐ€ ํƒœ์–ด๋‚œ๋‹ค !

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