πŸ‘€ κ°œμš”

ν”„λ‘œμ νŠΈ 진행 쀑 μ„œλ²„μ—μ„œ 데이터λ₯Ό λ°›μ•„ λ””μŠ€ν”Œλ ˆμ΄ν•˜λŠ” κΈ°λŠ₯을 ν…ŒμŠ€νŠΈ μ€‘μ΄μ—ˆλ‹€.

개발 쀑 console.log() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄ κ²°κ³Όλ₯Ό μ½˜μ†”μ— 좜λ ₯ν•΄ ν…ŒμŠ€νŠΈν•˜λŠ” κ²½μš°κ°€ λ§Žμ€λ°,

μ–΄λŠλ‚  μ½˜μ†”μ„ 보닀가 문득 μœ„ν™”κ°μ„ λŠκΌˆλ‹€.


(5) [{…}, {…}, {…}, {…}, {…}]
(5) [{…}, {…}, {…}, {…}, {…}]

λΆ„λͺ…νžˆ νŽ˜μ΄μ§€ 초기 λ‘œλ“œ μ‹œ 처음 μ„œλ²„λ‘œλΆ€ν„° 데이터λ₯Ό ν•œ 번 λ°›μ•„μ˜¨ ν›„, μ‚¬μš©μžκ°€ 별닀λ₯Έ μ‘°μž‘μ„ ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ μΆ”κ°€μ μœΌλ‘œ 데이터λ₯Ό μš”μ²­ν•  일이 μ—†λŠ”λ°λ„ 데이터 μš”μ²­μ„ 두 λ²ˆμ”© ν•˜κ³  μžˆμ—ˆλ‹€.

useEffectλ₯Ό μ‚¬μš©ν•΄ νŽ˜μ΄μ§€ 초기 λ‘œλ“œ μ‹œ λ™μž‘μ„ κ΅¬ν˜„ν•˜κ³  μžˆμ—ˆκΈ° λ•Œλ¬Έμ—, μ½”λ“œλ₯Ό μ‚΄νŽ΄λ΄€μ§€λ§Œ νŠΉλ³„νžˆ 문제 λ˜λŠ” 뢀뢄이 보이지 μ•Šμ•˜λ‹€.

무엇보닀 초기 λ‘œλ“œ 이후 μ‚¬μš©μžκ°€ 좔가적인 μ‘°μž‘μ„ ν–ˆμ„ λ•Œ (νŽ˜μ΄μ§€ λ³€κ²½, νŠΉμ • κ²Œμ‹œκΈ€ νŽ˜μ΄μ§€λ‘œ μ΄λ™ν–ˆλ‹€κ°€ λ‹€μ‹œ κ²Œμ‹œκΈ€ λͺ©λ‘μœΌλ‘œ λŒμ•„μ˜€λŠ” 경우)μ—λŠ” μ •μƒμ μœΌλ‘œ 데이터λ₯Ό ν•œ 번만 μš”μ²­ν•˜κ³  μžˆμ—ˆκΈ° λ•Œλ¬Έμ—, 원인이 λ‹€λ₯Έ 데 μžˆμ„ 것이라고 μƒκ°ν–ˆλ‹€.

그리고 원인을 찾아보닀가 ν”„λ‘œμ νŠΈλ₯Ό 처음 ꡬ성할 λ•Œ μ‚¬μš©ν–ˆλ˜ create-react-app 이 μžλ™μœΌλ‘œ μ μš©ν•œ React.StrictMode λ•Œλ¬Έμž„μ„ μ•Œκ²Œ λ˜μ—ˆλ‹€.

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    <BrowserRouter>
      <App />
    </BrowserRouter>
  </React.StrictMode>
);

πŸ€” React.StrictMode?

κ³΅μ‹λ¬Έμ„œλ₯Ό μ°Έκ³ ν•΄ μ •λ¦¬ν•œ React.StrictModeλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

<React.StrictMode> λ‚΄λΆ€μ˜ μ»΄ν¬λ„ŒνŠΈ νŠΈλ¦¬μ— λŒ€ν•΄ 개발 λͺ¨λ“œμ—μ„œμ˜ 좔가적인 λ™μž‘μ„ κ°€λŠ₯ν•˜κ²Œ ν•΄μ£Όλ©°, κ·Έ λ™μž‘λ“€μ€ μ•„λž˜μ™€ κ°™λ‹€.

  1. λΆˆμˆœν•œ(impure) λ Œλ”λ§μ„ 톡해 λ°œμƒν•  수 μžˆλŠ” 버그듀을 μ°ΎκΈ° μœ„ν•΄ μ»΄ν¬λ„ŒνŠΈλ“€μ΄ μΆ”κ°€μ μœΌλ‘œ μž¬λ Œλ”λ§(re-rendering) λœλ‹€.
  1. Effect cleanup의 λΆ€μž¬λ‘œ 인해 λ°œμƒν•  수 μžˆλŠ” 버그듀을 μ°ΎκΈ° μœ„ν•΄ μ»΄ν¬λ„ŒνŠΈμ˜ μ΄νŽ™νŠΈλ“€μ΄ μΆ”κ°€μ μœΌλ‘œ μž¬λ Œλ”λ§λœλ‹€.
  2. μ»΄ν¬λ„ŒνŠΈλ“€μ΄ Deprecated(미지원, ν˜Ήμ€ 미지원될) API듀을 μ‚¬μš©ν•˜λŠ”μ§€ κ²€μ‚¬ν•œλ‹€.

πŸ“ λ¨Όμ € μš©μ–΄λ“€μ„ μ •λ¦¬ν•΄λ³΄μž