roqkf

[React] key JSX 속성이 ν•„μš”ν•œ 이유 λ³Έλ¬Έ

πŸ’» Development/React

[React] key JSX 속성이 ν•„μš”ν•œ 이유

ahyeon7 2022. 11. 27. 03:53

Reactμ—μ„œλŠ” μ—¬λŸ¬κ°€μ§€ HTML μ—˜λ¦¬λ¨ΌνŠΈλ“€μ„ ν‘œμ‹œν•  λ•Œ map() ν•¨μˆ˜λ₯Ό μ΄μš©ν•˜λŠ”λ°, μ΄λ•Œ key JSX 속성을 λ„£μ§€ μ•ŠλŠ”λ‹€λ©΄ 리슀트의 각 μš”μ†Œμ—λŠ” keyλ₯Ό λ„£μ–΄μ•Ό λœλ‹€λŠ” κ²½κ³  κ°€ ν‘œμ‹œλœλ‹€.

μ–΄λ–€ κ²½κ³ ? keyλ₯Ό μ„€μ •ν•˜μ§€ μ•Šμ•˜μ„ λ•Œ λ‹€μŒκ³Ό 같은 κ²½κ³ λ₯Ό λ³Ό 수 μžˆλ‹€...

Each child in an array should have a unique “key” prop

πŸ€” Reactμ—μ„œ μ™œ Key 속성이 ν•„μš”ν• κΉŒ?

λ¦¬μ•‘νŠΈμ—μ„œλŠ” μ»΄ν¬λ„ŒνŠΈμ˜ μƒνƒœλ‚˜ 속성이 λ³€ν•  λ•Œλ§ˆλ‹€ render()λΌλŠ” ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œλ‹€.
이 ν•¨μˆ˜μ—μ„œλŠ” μƒˆλ‘œμš΄ λ¦¬μ•‘νŠΈ μš”μ†Œ 트리λ₯Ό λ°˜ν™˜ν•˜κ²Œ 되고, λ°˜ν™˜ν•œ νŠΈλ¦¬μ™€ 기쑴의 μš”μ†Œ 트리λ₯Ό λΉ„κ΅ν•˜μ—¬ μƒˆλ‘œμš΄ 변경점에 λŒ€ν•΄μ„œλ§Œ μž¬λ Œλ”λ§μ„ ν•˜κ²Œ λœλ‹€. μ΄λ ‡κ²Œ 두 트리λ₯Ό λΉ„κ΅ν•˜κΈ° μœ„ν•΄μ„œ key 속성을 μ‚¬μš©ν•˜λŠ” 것이고 μžμ‹ μš”μ†Œλ“€μ„ 반볡적으둜 λ Œλ”λ§ν•˜λŠ” μƒν™©μ—μ„œ λͺ…μ‹œμ μœΌλ‘œ keyλ₯Ό μ‚¬μš©ν•˜λŠ” 것이라고 ν•  수 μžˆλ‹€!

πŸ™„ keyλ₯Ό μƒλž΅ν•˜κ²Œ λœλ‹€λ©΄ λ Œλ”λ§ν•˜λŠ” λ°μ—λŠ” λ¬Έμ œλŠ” μ—†μ§€λ§Œ...

  1. λ¦¬μ•‘νŠΈκ°€ μ–΄λ–€ ν•­λͺ©μ„ λ³€κ²½ν•˜κ³  μΆ”κ°€, μ‚­μ œν• μ§€μ— λŒ€ν•œ 식별을 돕고
  2. μ—˜λ¦¬λ¨ΌνŠΈμ— μ•ˆμ •μ μΈ κ³ μœ μ„±μ„ λΆ€μ—¬ν•˜κΈ° μœ„ν•΄μ„œ

πŸ’₯ λ°°μ—΄ λ‚΄λΆ€μ˜ μ—˜λ¦¬λ¨ΌνŠΈλ₯Ό μ§€μ •ν•΄μ•Ό ν•œλ‹€.

key 값은 값이 λ³€ν•˜μ§€ μ•ŠλŠ”, μœ μΌμ„±μ„ κ°€μ§€κ²Œ λœλ‹€. (μœ μΌν•œ μ‹λ³„μžμ˜ μ—­ν• )
μ΄λŸ¬ν•œ κ³ μœ μ„±μ„ λΆ€μ—¬ν•˜κΈ° μœ„ν•΄μ„œ keyλ₯Ό λ°°μ—΄ 각 μš”μ†Œ(ν•­λͺ©) 간에 μ„œλ‘œλ₯Ό 식별할 수 있게 ν•˜λŠ” λ¬Έμžμ—΄μ„ μ‚¬μš©ν•˜λŠ” 것이 μ’‹μœΌλ©° λŒ€λΆ€λΆ„ λ°μ΄ν„°μ˜ IDλ₯Ό key둜 μ‚¬μš©ν•œλ‹€

❗ 데이터 μš”μ†Œ μ•ˆμ— IDλΌλŠ” ν”„λ‘œνΌν‹°κ°€ μ‘΄μž¬ν•  λ•Œλ§Œ κ°€λŠ₯!

const itembox = items.map( item =>
	<div key = {item.id}>
  		<h3>{item.title}<h3>
        <p>{item.price}</p>
  	</div>
);

[μ°Έκ³  λΈ”λ‘œκ·Έ]
1. https://junior-datalist.tistory.com/184
2. https://merrily-code.tistory.com/187

'πŸ’» Development > React' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[React] Reactμ—μ„œμ˜ State 이벀트 처리  (1) 2022.11.30
[React] React State & Props  (0) 2022.11.30
[React] React Router  (0) 2022.11.30
[React] SPA  (0) 2022.11.30
[React] React & JSX  (0) 2022.11.27