๐Ÿ“6์ฃผ์ฐจ ์œ„ํด๋ฆฌ ํŽ˜์ดํผ ๋ฏธ์…˜

pjw__98ยท2023๋…„ 11์›” 26์ผ
1
post-thumbnail
๐Ÿ“Œ 6์ฃผ์ฐจ๋Š” React์— props์™€ useState , useEffect์— ๋Œ€ํ•ด 
ํ•™์Šต์„ ํ•˜๋ฉด์„œ ๊ณผ์ œ๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค.์ •๋ง ์‹œ๊ฐ„๊ฐ€๋Š”์ค„ ๋ชจ๋ฅด๊ณ  ํ•œ ์ฃผ๋ฅผ๋ณด๋ƒˆ๋‹ค.
api data๋ฅผ ์ด์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ ๊ณผ์ œ๋ฅผ ์ฝ”๋”ฉํ–ˆ์—ˆ๋Š”๋ฐ , ๊ฒ€์ƒ‰ํ•˜๋žด ๋ณต์Šตํ•˜๋žด ์ฝ”๋”ฉํ•˜๋žด..์ •๋ง 
JS,React ์ •๋ง ๋„ˆ๋ฌด๋‚˜๋„ ์ž˜ํ•˜๊ณ ์‹ถ๋‹ค.
๋ณต์Šต ๊พธ์ค€ํžˆ ํ•˜๊ณ  ํ•™์Šต์ง„๋„ ์—ด์‹ฌํžˆ ๋”ฐ๋ผ๊ฐ€๋ณด์ž! 
์ด๋ฒˆ ์ฃผ์ œ๋Š” React์— ๊ด€ํ•œ 2๊ฐ€์ง€ ์ฃผ์ œ๋ฅผ ๋ฐ›์•˜๋‹ค.

๐ŸŽฏ๋ฆฌ์•กํŠธ์—์„œ Virtual DOM์ด ๋ฌด์—‡์ธ์ง€, ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

  • DOM์ด๋ž€ ?
    DOM์€ Document Object Model ์˜ ์•ฝ์ž์ด๋ฉฐ,
    ๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ์ด๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค.
    HTML ๋ฌธ์„œ์ „์ฒด๋ฅผ ๊ฐ์ฒด๋กœ ํ‘œํ˜„ํ•œ๊ฒƒ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ
    ๊ฐ ๊ฐ์ฒด๋ฅผ ๋…ธ๋“œ(Node)๋ผ๋Š” ์šฉ์–ด๋กœ ํ‘œํ˜„ํ•œ๋‹ค.
    ํƒœ๊ทธ๋Š” ์š”์†Œ ๋…ธ๋“œ, ๋ฌธ์ž๋Š” ํ…์ŠคํŠธ ๋…ธ๋“œ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.
  • Virtual DOM์ด๋ž€?
    Virtual DOM์ด๋ž€ ๊ฐ€์ƒ DOM์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค.
    Virtual์€ ๊ฐ€์ƒ ์ด๋ผ๋Š” ๋œป์„ ์ง€๋‹ˆ๊ณ  ์žˆ๋‹ค.
    ๊ฐ€์ƒ DOM์€ ๋ฉ”๋ชจ๋ฆฌ์— DOM(๋ฌธ์„œ ๊ฐœ์ฒด ๋ชจ๋ธ)์˜ ๊ฐ€์ƒ ํ‘œํ˜„์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ๋œ ์›น ๊ฐœ๋ฐœ์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐœ๋… ๋ฐ ๊ธฐ์ˆ ์ด๋‹ค.
    ํ•˜์ง€๋งŒ Javascript๋Š” ๋‚˜๋‚ ํžˆ ๋ฐœ์ „์„ ํ•˜๊ณ ์žˆ๋Š”๋ฐ ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ 
    ์™œ Virtual DOM์„ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ผ๊นŒ?
    ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋•Œ๋ฌธ์ด๋‹ค.
    Virtual DOM์„ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š”๋ฐ ๋ณด๋‹ค ํšจ์œจ ์ ์ด๊ณ  ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— Virtual DOM์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋‹ค.
    UI๋ฅผ ๋ณ€๊ฒฝํ•ด๋„ ์ „์ฒด DOM์ด ์ฆ‰์‹œ ์—…๋ฐ์ดํŠธ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค. ๋Œ€์‹ , ๋จผ์ € ๊ฐ€์ƒ DOM์ด๋ผ๊ณ  ์•Œ๋ ค์ง„ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด DOM์˜ ๊ฐ€์ƒ ํ‘œํ˜„์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ ์šฉ๋œ๋‹ค.
    ๊ฐ€์ƒ DOM์€ ์‹ค์ œ DOM์˜ ๊ฒฝ๋Ÿ‰ ๋ณต์‚ฌ๋ณธ์ด๋ฉฐ, ์—…๋ฐ์ดํŠธ๊ฐ€ ํŽ˜์ด์ง€์—์„œ ์ง์ ‘ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋น ๋ฅด๋‹ค.์™ธ์—๋„ ๋งŽ์€ ์žฅ์ ๋“ค์ด ์žˆ๊ธฐ์—
    Virtual DOM์„ ๋งŽ์ด ์„ ํ˜ธํ•˜๊ณ ์žˆ๋Š” ์ถ”์„ธ๋‹ค.

๐ŸŽฏ๋ฆฌ์•กํŠธ์—์„œ ๋ฐฐ์—ด์„ ๋ Œ๋”๋งํ•  ๋•Œ key๋ฅผ ์จ์•ผ ํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

  • ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฐ˜๋ณตํ•˜์—ฌ ๋ Œ๋”๋งํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, map์„ ์‚ฌ์šฉํ•œ๋‹ค.

    ๋งŒ์•ฝ ๋ฐฐ์—ด ๋‚ด๋ถ€์˜ ์—˜๋ฆฌ๋จผํŠธ์— key ๊ฐ’์„ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด,

'Each child in a list should have a unique key prop.' 

์œ„์™€ ๊ฐ™์€ ๊ฒฝ๊ณ ๋ฌธ์ด ๋œจ๊ฒŒ ๋œ๋‹ค.

๋ฆฌ์•กํŠธ ๊ณต์‹๋ฌธ์„œ์—์„œ๋Š” key๋Š” ์–ด๋–ค ์•„์ดํ…œ์ด ๋ณ€ํ™”๋˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ ๋˜๋Š” ์‚ญ์ œ๋˜์—ˆ๋Š”์ง€๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•˜๋‹ค๊ณ  ํ•œ๋‹ค.

๋ฆฌ์•กํŠธ๋Š” state์—์„œ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์ฐพ์•„ ๋ฆฌ๋ Œ๋”๋งํ•ด์ค€๋‹ค.
์ด๋•Œ ๊ฐ€์ƒ DOM๊ณผ ๋น„๊ตํ•˜์—ฌ ํ•ด๋‹น ๋ถ€๋ถ„๋งŒ ๋ฆฌ๋ Œ๋”๋งํ•ด์ค€๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š”
๋ฐฐ์—ด์— ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค๋ฉด ๋ฐฐ์—ด ์ „์ฒด๊ฐ€ ๋ณ€๊ฒฝ๋œ ๊ฒƒ์ด๋ผ๊ณ  ์ธ์‹ํ•˜๊ณ  ์ „์ฒด๋ฅผ ๋ฆฌ๋ Œ๋”๋ง ํ•œ๋‹ค.

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

๐Ÿ‘๐ŸปRefernce
Code-it
React Key

profile
โ˜„๏ธ

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