React

[React] React key

zubetcha 2021. 11. 29. 09:22

 

 

 

 

React key

 

 

๐Ÿ”‘ React์—์„œ key์˜ ์—ญํ• 

 

 

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

๋ฐฐ์—ด์˜ element์— ๊ณ ์œ ์„ฑ์„ ๋ถ€์—ฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐ์—ด ๋‚ด๋ถ€์˜ eliment์— key๋ฅผ ์ง€์ •ํ•œ๋‹ค.

 

key๋Š” ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์œผ๋ฉฐ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ID๋ฅผ key๋กœ ์‚ฌ์šฉํ•˜์ง€๋งŒ

์•ˆ์ •์ ์ธ ID๊ฐ€ ์—†๋‹ค๋ฉด ์ตœํ›„์˜ ์ˆ˜๋‹จ์œผ๋กœ ๊ฐ element์˜ index๋ฅผ key๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

const todoItems = todos.map((todo) =>
  <li key={todo.id}>
    {todo.text}
  </li>
);

 

 

 

๐Ÿ”‘ React์—์„œ key๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

 

 

 ํšจ์œจ์ ์ธ DOM ํŠธ๋ฆฌ ๊ตฌ์กฐ ๊ตฌ์ถ• ๋ฐ ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ์œ„ํ•ด ๐Ÿ’ก

 

 

React์˜ ๊ฐ€์ƒ DOM ํŠธ๋ฆฌ ๋น„๊ต ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์•„๋ž˜์˜ ๋‘ ๊ฐ€์ง€ ๊ฐ€์ •์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค.

 

๐Ÿ“Œ ์„œ๋กœ ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๋‘ element๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ ๋‹ค.

๐Ÿ“Œ key prop์„ ์ด์šฉํ•ด์„œ ์—ฌ๋Ÿฌ ๋ Œ๋”๋ง ์‚ฌ์ด์—์„œ ์–ด๋–ค ์ž์‹ element๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•„์•ผ ํ• ์ง€ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.

 

element์˜ ํƒ€์ž…์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋Š” ํŠธ๋ฆฌ ์ „์ฒด๋ฅผ ์žฌ๊ตฌ์ถ•ํ•˜์ง€๋งŒ,

element์˜ ํƒ€์ž…์ด ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ๋‘ element์˜ ์†์„ฑ์„ ๋™์‹œ์— ํ™•์ธํ•ด์„œ ๋™์ผํ•œ ๋‚ด์—ญ์€ ์œ ์ง€ํ•˜๊ณ  ๋ณ€๊ฒฝ๋œ ์†์„ฑ๋“ค๋งŒ ๊ฐฑ์‹ ํ•œ๋‹ค.

ex) className์ด ๋ณ€๊ฒฝ๋˜๋ฉด className๋งŒ ๊ฐฑ์‹ ํ•˜๊ณ , inline CSS๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด inline CSS๋งŒ ๊ฐฑ์‹ 

 

 

case 1. key๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ๋งˆ์ง€๋ง‰์— element๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ

 

๐Ÿ‘‰๐Ÿป ์ฒซ ๋ฒˆ์งธ, ๋‘ ๋ฒˆ์งธ๋Š” ์œ ์ง€ํ•˜๊ณ  <li>third</li> ๋งŒ ์ถ”๊ฐ€

 

<ul>
  <li>first</li>
  <li>second</li>
</ul>

<ul>
  // ์œ ์ง€
  <li>first</li>
  // ์œ ์ง€
  <li>second</li>
  // ์ถ”๊ฐ€๋œ ์„ธ ๋ฒˆ์งธ element๋งŒ ์—…๋ฐ์ดํŠธํ•ด์„œ ๋ Œ๋”๋ง
  <li>third</li> // ์ถ”๊ฐ€๋œ ์„ธ ๋ฒˆ์งธ element๋งŒ ์—…๋ฐ์ดํŠธ
</ul>

 

 

case 2. key๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ์ฒซ ๋ฒˆ์งธ์— element๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ

 

๐Ÿ‘‰๐Ÿป ์ฒซ ๋ฒˆ์งธ element๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ element๊นŒ์ง€ ๋ชจ๋‘ ์ƒˆ๋กœ ๊ตฌ์ถ•ํ•ด์•ผ ํ•ด์„œ ๋น„ํšจ์œจ์ ์ž„

 

<ul>
  <li>Duke</li>
  <li>Villanova</li>
</ul>

<ul>
  // ์ƒˆ๋กœ ์—…๋ฐ์ดํŠธํ•ด์„œ ๋ Œ๋”๋ง
  <li>Connecticut</li>
  // ์ƒˆ๋กœ ์—…๋ฐ์ดํŠธํ•ด์„œ ๋ Œ๋”๋ง
  <li>Duke</li>
  // ์ƒˆ๋กœ ์—…๋ฐ์ดํŠธํ•ด์„œ ๋ Œ๋”๋ง
  <li>Villanova</li>
</ul>

 

 

case 3. key ๊ฐ’์„ ๋ถ€์—ฌํ•˜๋ฉด์„œ ์ฒซ ๋ฒˆ์งธ์— element๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ

 

๐Ÿ‘‰๐Ÿป key ์†์„ฑ์„ ์ด์šฉํ•˜๋ฉด key๋ฅผ ํ†ตํ•ด ๊ธฐ์กด์˜ DOM ํŠธ๋ฆฌ์™€

     ์—…๋ฐ์ดํŠธ๋œ DOM ํŠธ๋ฆฌ์˜ ์ž์‹ element๋“ค์ด ๋™์ผํ•œ์ง€ ํ™•์ธํ•ด์„œ

     key ๊ฐ’์ด ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” element๋งŒ ์ถ”๊ฐ€ํ•ด์„œ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ Œ๋”๋ง์— ํšจ์œจ์ ์ž„

 

<ul>
  <li key="2015">Duke</li>
  <li key="2016">Villanova</li>
</ul>

<ul>
   // ์ฒซ ๋ฒˆ์งธ์— ์ถ”๊ฐ€๋˜์—ˆ์ง€๋งŒ ํ•ด๋‹น element๋งŒ ์—…๋ฐ์ดํŠธํ•ด์„œ ๋ Œ๋”๋งํ•จ
  <li key="2014">Connecticut</li>
  // ๊ธฐ์กด์˜ key ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” element๋“ค์€
  <li key="2015">Duke</li>
  // DOM์— ์ƒˆ๋กœ ๊ตฌ์ถ•๋˜์ง€ ์•Š๊ณ  ์ž๋ฆฌ๋งŒ ์ด๋™
  <li key="2016">Villanova</li>
</ul>