๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป DEV/React

[React] ๋ฆฌ์ŠคํŠธ์˜ Key

by vodkassi 2021. 5. 9.
728x90

โœจ React ์—์„œ Key๋ž€?

์—˜๋ฆฌ๋จผํŠธ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ ํฌํ•จํ•ด์•ผ ํ•˜๋Š” ํŠน์ˆ˜ํ•œ ๋ฌธ์ž์—ด ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์ด๋‹ค.

React๊ฐ€ ์–ด๋–ค ํ•ญ๋ชฉ์„ ๋ณ€๊ฒฝ, ์ถ”๊ฐ€ ๋˜๋Š” ์‚ญ์ œํ• ์ง€ ์‹๋ณ„ํ•˜๋Š” ๊ฒƒ์„ ๋•๋Š”๋‹ค.

 

function NumberList(props) {
  return (
      <ul className="test">
          <li key='1'>1</ul>
          <li key='2'>2</ul>
          <li key='3'>3</ul>
      </ul>
      )
 }

 

Key ์˜ ํŠน์ง•์€?

๊ณ ์œ ํ•œ ๊ฐ’์ด์–ด์•ผ ํ•˜๋ฉฐ, ํ˜•์ œ ๋…ธ๋“œ์ธ ๋‹ค๋ฅธ ์•„์ดํ…œ๊ณผ์˜ ์ค‘๋ณต๋œ ํ‚ค ๊ฐ’์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

๋˜ํ•œ, ์ปดํฌ๋„ŒํŠธ์˜ ๊ตฌ์„ฑ์š”์†Œ๋กœ ์ „๋‹ฌ๋˜์ง€ ์•Š๋Š”๋‹ค. (๋”ฐ๋ผ์„œ props ์— key ๊ฐ€ ํฌํ•จ๋˜์—ˆ๋‹ค ํ•ด๋„ props.key ๋กœ ์‚ฌ์šฉ ๋ถˆ๊ฐ€ํ•˜๋‹ค)

 

์ฃผ์˜ํ•  ์ 

์ปดํฌ๋„ŒํŠธ ํ•˜๋‚˜๋ฅผ ์—ฌ๋Ÿฌ ์ฐจ๋ก€ ๋ฐ˜๋ณตํ•ด์„œ ๋‚˜์—ดํ•  ๊ฒฝ์šฐ ์ปดํฌ๋„ŒํŠธ ์ž์ฒด๊ฐ€ ํ•˜๋‚˜์˜ list ๊ฐ€ ๋œ๋‹ค.

์ด ๊ฒฝ์šฐ, ์ปดํฌ๋„ŒํŠธ ์ž์ฒด์˜ key ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

function ListItem(props) {
  // ๋งž์Šต๋‹ˆ๋‹ค! ์—ฌ๊ธฐ์—๋Š” key๋ฅผ ์ง€์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  return <li>{props.value}</li>;
}

function NumberList(props) {
  const numbers = props.numbers;
  const listItems = numbers.map((number) => {
    // ๋งž์Šต๋‹ˆ๋‹ค! ๋ฐฐ์—ด ์•ˆ์— key๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    return <ListItem key={number.toString()} value={number} />
  });
  return (
    <ul>
      {listItems}
    </ul>
  );
}

const numbers = [1, 2, 3, 4, 5];
ReactDOM.render(
  <NumberList numbers={numbers} />,
  document.getElementById('root')
);

 

์ฐธ๊ณ ์ž๋ฃŒ

React ๊ณต์‹๋ฌธ์„œ: List ์™€ Key

๋Œ“๊ธ€