ํ ํ์ฌ์ ๊ธฐ์ ์ธํฐ๋ทฐ์์ ๋ฆฌ์กํธ์ key์ ๋ํ ์ง๋ฌธ์ ๋ฐ์๋ค. ํด๋น ์ง๋ฌธ์ ๋ํ ๋๋ต์ ํ๋ ๊ณผ์ ์์ ๊ทธ๋์์ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ๋ฆฌ์คํธ์ ๊ฐ ํญ๋ชฉ์ key๋ฅผ ํ ๋นํ๋ ๊ฒ์ ๋๋ฌด ๋น์ฐ์ํ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค์ด ์ด์ ๋ํด ์์๋ณด๋ ค๊ณ ํ๋ค.
๋ฐฐ์ด์์ ๋ฐ์ดํฐ ๋ ๋๋ง
const people = [
{
id: 0,
name: 'Creola Katherine Johnson',
profession: 'mathematician',
},
{
id: 1,
name: 'Mario José Molina-Pasquel Henríquez',
profession: 'chemist',
},
];
export default function List() {
const listItems = people.map((person) => <li>{person.name}</li>);
return <ul>{listItems}</ul>;
}
๐จ ์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ์ฝ์์ ๋ค์๊ณผ ๊ฐ์ด ๋ฆฌ์คํธ์ ๊ฐ ํญ๋ชฉ์ "key"๋ฅผ ๋ฃ์ด์ผ ํ๋ค๋ ๊ฒฝ๊ณ ๊ฐ ํ์๋๋ค.
๋ฆฌ์คํธ์ ๊ฐ ํญ๋ชฉ์ "key"๋ฅผ ๋ฃ์ด์ค์ผ๋ก์จ ๊ฐ๋จํ๊ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค. (๊ณ ์ ํ ๊ฐ ์ฌ์ฉ)
<li key={person.id}>...</li>
key๋ ๋ฆฌ์กํธ์ ๊ฐ ๊ตฌ์ฑ ์์๊ฐ ํด๋นํ๋ ๋ฐฐ์ด ํญ๋ชฉ์ ์๋ ค์ฃผ๋ฏ๋ก ๋์ค์ ์ผ์น์ํฌ ์ ์๋ค. ํนํ ๋ฐฐ์ด ํญ๋ชฉ์ด ์ ๋ ฌ๋ก ์ธํด ์ด๋ํ๊ฑฐ๋, ์ฝ์ ๋๋ ์ญ์ ๋ ๊ฒฝ์ฐ key๋ ๋งค์ฐ ์ค์ํ๋ค. ์ ์ ํ๋ key๋ ๋ฆฌ์กํธ๊ฐ ์ ํํ ๋ฌด์จ ์ผ์ด ์ผ์ด๋ฌ๋์ง ์ถ๋ก ํ๊ณ DOM ํธ๋ฆฌ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ ๋ฐ์ดํธํ๋ ๋ฐ ๋์์ด ๋๋ค.
๋ฆฌ์กํธ์ key๊ฐ ํ์ํ ์ด์
๊ณต์ ๋ฌธ์์์ ํ์ผ ์ด๋ฆ์ ์์๋ก ์น์ ํ๊ฒ ์ค๋ช ํด ์ฃผ๊ณ ์๋ค.
๋ฐ์คํฌํฑ์ ํ์ผ์ ์ด๋ฆ์ด ์๋ ๋์ ์ ์ฒซ ๋ฒ์งธ ํ์ผ, ๋ ๋ฒ์งธ ํ์ผ ๋ฑ์ ์์๋ก ์ฐธ์กฐํ๋ค๊ณ ์์ํด ๋ณด์. ์ต์ํด์ง ์ ์์ง๋ง ์ฒซ ๋ฒ์งธ ํ์ผ์ด ์ญ์ ๋๋ค๋ฉด ๋ ๋ฒ์งธ ํ์ผ์ ์ฒซ ๋ฒ์งธ ํ์ผ์ด ๋๊ณ ์ธ ๋ฒ์งธ ํ์ผ์ ๋ ๋ฒ์งธ ํ์ผ์ด ๋๋ค. ์ด๋ ํผ๋์ ์ผ๊ธฐํ ์ ์๋ค.
ํด๋์ ํ์ผ ์ด๋ฆ๊ณผ JSX์์ key๋ ๋น์ทํ ์ฉ๋๋ก ์ฌ์ฉ๋๋ค. key๋ฅผ ํตํด ํ์ ๊ฐ์ ํญ๋ชฉ์ ๊ณ ์ ํ๊ฒ ์๋ณํ ์ ์๋ค. ์ฌ์ ๋ ฌ๋ก ์์น๊ฐ ๋ณ๊ฒฝ๋๋๋ผ๋ key๋ฅผ ํตํด ๋ฆฌ์กํธ๋ ์ ์ฒด ์๋ช ๋์ ํญ๋ชฉ์ ์๋ณํ ์ ์๋ค.
๊ณ ์ ํ key๋ฅผ ์ป์ ์ ์๋ ๋ฐฉ๋ฒ
ํญ๋ชฉ์ ์ฝ์ ํ๊ฑฐ๋ ์ญ์ ํ๊ฑฐ๋ ๋ฐฐ์ด์ด ์ฌ์ ๋ ฌ๋๋ ๊ฒฝ์ฐ ํญ๋ชฉ์ ๋ ๋๋งํ๋ ์์๋ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๋ฅผ key๋ก ์ฌ์ฉํ๋ฉด ์ข ์ข ๋ฏธ๋ฌํ๊ณ ํผ๋์ค๋ฌ์ด ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ๋ค. (๊ถ์ฅ โ)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ: ๋ฐ์ดํฐ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ค๋ ๊ฒฝ์ฐ ๋ณธ์ง์ ์ผ๋ก ๊ณ ์ ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํค/ID๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- ๋ก์ปฌ์์ ์์ฑ๋ ๋ฐ์ดํฐ: ๋ฐ์ดํฐ๊ฐ ๋ก์ปฌ์์ ์์ฑ๋๊ณ ์ ์ง๋๋ ๊ฒฝ์ฐ crypto.randomUUID() ๋๋ uuid์ ๊ฐ์ ํจํค์ง๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
key์ ๊ท์น
- key๋ ํ์ ๊ฐ์ ๊ณ ์ ํด์ผ ํ์ง๋ง ๋ค๋ฅธ ๋ฐฐ์ด์ JSX ๋ ธ๋์ ๋์ผํ key๋ฅผ ์ฌ์ฉํด๋ ๊ด์ฐฎ๋ค.
- ํค๋ ๋ณ๊ฒฝ๋์ด์๋ ์ ๋๋ฉฐ, ํค์ ๋ชฉ์ ์ ์ด๊ธ๋๋ฉด ์ ๋๋ค! ๋ ๋๋งํ๋ ๋์ ์์ฑํ์ง ์๋๋ก ํ๋ค.
๐๐ป ์ฐธ๊ณ ์ฌ์ดํธ
Rendering Lists – React
The library for web and native user interfaces
react.dev
๋ฆฌ์กํธ์ Key๋ฅผ ์์๋ณด์
์ด๋ฒ ๊ธ์์๋ ๋ฆฌ์กํธ์์ key๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ๋ฒ์ ๋ํด์ ์์๋ณด๊ณ ์ ํ๋ค. key๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๊ฐ๋จํ ์ดํด๋ฅผ ์ํด์ ๋ค์๊ณผ ๊ฐ์ ๋ฐฐ์ด์ด ์๋ค๊ณ ํ์. ๊ทธ๋ฆฌ๊ณ ์ ๋ฐฐ์ด์ ๋ค์
tecoble.techcourse.co.kr