React

์ด ์ž‘์€ ์ฐจ์ด๊ฐ€ ์„ฑ๋Šฅ์„ ๋ฐ”๊พผ๋‹ค! key={index} vs key={id}

ioh'sDeveloper 2025. 3. 18. 22:43

๐Ÿ” key={index} vs key={id} ์ฐจ์ด์  & ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ด์œ 

React์—์„œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ Œ๋”๋งํ•  ๋•Œ ๊ฐ ํ•ญ๋ชฉ์„ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์žˆ๋„๋ก key ์†์„ฑ์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ž˜๋ชป๋œ key ์„ค์ •์€ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์„ ์œ ๋ฐœํ•˜๊ณ  ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” key={index}์™€ key={id}์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•˜๊ณ , ์ตœ์ ์˜ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


๐Ÿšจ key={index}์˜ ๋ฌธ์ œ์ 

{data.map((item, index) => (
    <FimListItem key={index} item={item} />
))}

โœ”๏ธ index๋ฅผ key๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐฐ์—ด ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€” ๋•Œ React๊ฐ€ ํ•ญ๋ชฉ์„ ์ž˜๋ชป ์ธ์‹ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค.

๐Ÿ“Œ ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ๋‚˜๋ฆฌ์˜ค

1๏ธโƒฃ ์ƒˆ๋กœ์šด ํ•ญ๋ชฉ์ด ๋ฆฌ์ŠคํŠธ ์ค‘๊ฐ„์— ์‚ฝ์ž…๋  ๋•Œ

  • ๊ธฐ์กด ๋ฆฌ์ŠคํŠธ: [A, B, C]
  • ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ: [A, NEW, B, C]
  • React๋Š” index๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋น„๊ตํ•˜๋ฏ€๋กœ B๊ฐ€ NEW๊ฐ€ ๋˜๊ณ , C๊ฐ€ B๊ฐ€ ๋˜๋Š” ์‹์œผ๋กœ ์ž˜๋ชป ๋งค์นญ๋จ.

2๏ธโƒฃ ๋ฆฌ์ŠคํŠธ ํ•ญ๋ชฉ์ด ์‚ญ์ œ๋  ๋•Œ

  • ๊ธฐ์กด ๋ฆฌ์ŠคํŠธ: [A, B, C]
  • A๊ฐ€ ์‚ญ์ œ๋˜๋ฉด React๋Š” B๋ฅผ A๋กœ, C๋ฅผ B๋กœ ์ธ์‹ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Œ.
  • ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๊ฐ€ ๊ผฌ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Œ.

์ฆ‰, ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ ์ •๋ ฌ์ด ๋ฐ”๋€Œ๋Š” ๊ฒฝ์šฐ index๋ฅผ key๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Œ.


โœ… key={id}๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

{data.map((item) => (
    <FimListItem key={item.id} item={item} />
))}

โœ”๏ธ id๋Š” ๊ฐ ํ•ญ๋ชฉ์ด ๊ฐ€์ง€๋Š” ๊ณ ์œ ํ•œ ๊ฐ’์ด๋ฏ€๋กœ, React๊ฐ€ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •ํ™•ํžˆ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ด์œ 

  • React๋Š” key๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฐ€์ƒ DOM์„ ๋น„๊ตํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  • index๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐฐ์—ด ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€” ๋•Œ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•˜์ง€๋งŒ,
    ๊ณ ์œ ํ•œ id๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ€๊ฒฝ๋œ ํ•ญ๋ชฉ๋งŒ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

์ฆ‰, key={id}๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์ตœ์ ์˜ ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Œ!


๐Ÿ” key={index} vs key={id} ๋น„๊ต

๊ธฐ์ค€ key={index} key={id}

ํ•ญ๋ชฉ์ด ์ถ”๊ฐ€/์‚ญ์ œ๋  ๋•Œ React๊ฐ€ ๊ธฐ์กด ์š”์†Œ๋ฅผ ์ž˜๋ชป ์ธ์‹ํ•  ์ˆ˜ ์žˆ์Œ React๊ฐ€ ์ •ํ™•ํ•˜๊ฒŒ ํ•ญ๋ชฉ์„ ์ธ์‹
๋ฆฌ์ŠคํŠธ ์ˆœ์„œ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง ๋ฐœ์ƒ ๊ฐ€๋Šฅ ๋ณ€๊ฒฝ๋œ ํ•ญ๋ชฉ๋งŒ ์—…๋ฐ์ดํŠธ
์„ฑ๋Šฅ ์ตœ์ ํ™” ์„ฑ๋Šฅ ์ €ํ•˜ ๊ฐ€๋Šฅ ์ตœ์ ์˜ ๋ Œ๋”๋ง ์„ฑ๋Šฅ ์œ ์ง€

๐ŸŽฏ ๊ฒฐ๋ก 

โœ” ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ ์ •๋ ฌ์ด ๋ฐ”๋€” ๊ฒฝ์šฐ,
๐Ÿ‘‰ ํ•ญ๋ชฉ์˜ ๊ณ ์œ  ID(id)๋ฅผ key๋กœ ์‚ฌ์šฉํ•ด์•ผ React์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง!

React์˜ ๋ Œ๋”๋ง ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด index ๋Œ€์‹  ๊ณ ์œ ํ•œ id ๊ฐ’์„ ํ™œ์šฉํ•˜์„ธ์š”!