๐ 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 ๊ฐ์ ํ์ฉํ์ธ์!
'React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React 18 + TypeScript + React Query + Hooks ์ค๋ฌด ์ ์ฉ๊ธฐ (0) | 2025.03.18 |
---|---|
React 18์์ ํจ์จ์ ์ธ ์ปดํฌ๋ํธ ์ค๊ณ๋? (0) | 2025.03.18 |