React LifeCycle βš›οΈ

React

🧬 What is LifeCycle in React ?

ν•œκ΅­μ–΄λ‘œλŠ” 생λͺ…주기라 λΆ€λ₯Έλ‹€.

λ¦¬μ•‘νŠΈμ—μ„œ μ»΄ν¬λ„ŒνŠΈκ°€ λ‚˜νƒ€λ‚ λ•Œ, μ—…λ°μ΄νŠΈλ  λ•Œ, μ‚¬λΌμ§ˆ λ•Œ 쀑간쀑간 μ–΄λ– ν•œ μž‘μ—…λ“€μ„ μ‹€ν–‰μ‹œν‚€κ³  μ‹Άμ„λ•Œ μ‚¬μš©ν•˜λŠ” 것이 이 LifeCycle APIλ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€.

LifeCycle

μ‚¬μ§„μ—μ„œ 보이듯이 λ‹€μ–‘ν•œ API듀이 μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ— 맀우 λ³΅μž‘ν•˜κ³  μ–΄λ €μ›Œλ³΄μ΄μ§€λ§Œ 사싀 μ™ΈμšΈ ν•„μš”λŠ” μ—†κ³  κ°œλ…μ„ μ΄ν•΄ν•˜κ³  λ‚˜μ€‘μ— μ“Έ λ•Œ μ‚¬μš©ν•˜λ©΄ λœλ‹€. ν•˜μ§€λ§Œ μ΄λŠ” ν˜„μž¬ Hook을 μ‚¬μš©ν•˜λŠ” ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œ μ‚¬μš©ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ‚¬μš©ν•  일은 크게 μ—†κ² μ§€λ§Œ κ·Έλž˜λ„ λ ˆκ±°μ‹œ 클래슀 μ»΄ν¬λ„ŒνŠΈ μ½”λ“œλ₯Ό 보고 이해할 ν•„μš”κ°€ 있기 λ•Œλ¬Έμ— κΌ­ μ•Œμ•„λ‘λŠ” 것이 μ’‹λ‹€.


πŸ₯š Mounting

μ»΄ν¬λ„ŒνŠΈκ°€ 우리 λΈŒλΌμš°μ € 상에 λ‚˜νƒ€λ‚œλ‹€λŠ” 의미

Constructor

μ»΄ν¬λ„ŒνŠΈκ°€ 가지고 μžˆμ„ State μ΄ˆκΈ°μ„€μ •μ„ ν•œλ‹€λ˜μ§€ μ•„λ‹ˆλ©΄ μ»΄ν¬λ„ŒνŠΈκ°€ λ§Œλ“€μ–΄μ§ˆλ•Œ ν•΄μ•Όν•˜λŠ” 초기의 μž‘μ—…λ“€μ΄ μžˆμ„λ•Œ μ„€μ •ν•œλ‹€.

getDerivedStateFromProps

Props둜 받은 값을 State에 λ™κ²°μ‹œν‚€κ³  싢을 λ•Œ μ‚¬μš©ν•˜λŠ” API이닀. λ§ˆμš΄νŒ… κ³Όμ •μ—μ„œλ„ 있고, μ—…λ°μ΄νŠΈ κ³Όμ •μ—μ„œλ„ Propsκ°€ λ°”λ€Œκ²Œ 되면 μ‹€ν–‰λœλ‹€.

Render

μš°λ¦¬κ°€ μ–΄λ–€ 돔을 λ§Œλ“€κ²Œ 될지, νƒœκ·Έλ“€μ˜ μ–΄λ–€ 값을 전달할건지 μ •μ˜ν•΄μ£Όκ²Œ λœλ‹€.

componentDidMount

λžœλ”ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜κ³  λΈŒλΌμš°μ € 상에 μ»΄ν¬λ„ŒνŠΈκ°€ λ‚˜νƒ€λ‚˜κ²Œ λœλ‹€λ©΄ componentDidMountκ°€ μ‹€ν–‰λœλ‹€. 이 APIμ—μ„œλŠ” μ™ΈλΆ€ 라이브러리λ₯Ό μ‚¬μš©ν•  경우 μ—¬κΈ°μ„œ μ‚¬μš©ν•  수 있으며, λ„€νŠΈμ›Œν¬ AJAX μš”μ²­μ„ ν•  λ•Œλ„ 이 APIμ—μ„œ μ‚¬μš©ν•˜κ²Œ λœλ‹€. λ˜ν•œ μ»΄ν¬λ„ŒνŠΈκ°€ λ‚˜νƒ€λ‚˜κ³  λͺ‡ 초 뒀에 μ‹€ν–‰ν•˜κ³  싢은 μž‘μ—…λ„ ν•  수 μžˆλ‹€.


πŸ“ Updating

λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈλ‚˜ State & Props κ°€ λ°”λ€Œμ–΄μ„œ μž¬λžœλ”λ§ λ˜λŠ” 것을

shouldComponentUpdate

μ»΄ν¬λ„ŒνŠΈκ°€ μ—…λ°μ΄νŠΈ λ˜λŠ” μ„±λŠ₯을 μ΅œμ ν™” μ‹œν‚¬λ•Œ μ‚¬μš©λœλ‹€. λ¦¬μ•‘νŠΈμ—μ„œλŠ” λΆ€λͺ¨ μ»΄νΌλ„ŒνŠΈκ°€ λ¦¬λžœλ”λ§ 되면 μžμ‹ μ»΄ν¬λ„ŒνŠΈ render ν•¨μˆ˜λ„ λ‹€ μ‹€ν–‰λ˜κ²Œ λœλ‹€. ν•˜μ§€λ§Œ 이 μž‘μ—…λ“€μ΄ λΆˆνŽΈν•  수 도 μžˆλ‹€. λ¦¬μ•‘νŠΈμ—μ„œλŠ” λ¦¬λžœλ”λ§μ΄ λ°œμƒν•˜κ²Œ λœλ‹€λ©΄ 가상 돔에 κ·Έλ € μ‹€μ œ 돔과 λΉ„κ΅ν•˜μ—¬ 생긴 차이λ₯Ό μ‹€μ œ 돔에 λ¦¬λžœλ”λ§ ν•˜λŠ” λ°©μ‹μœΌλ‘œ μž‘λ™λ˜λŠ”λ°, λ§Œμ•½μ— 가상 돔에 λͺ‡ 천개의 μ»΄ν¬λ„ŒνŠΈλ“€μ΄ 그렀진닀고 ν•˜λ©΄ 그것도 μ„±λŠ₯μƒμœΌλ‘œ μ €ν•˜λ‘œ μ΄μ–΄μ§ˆ 수 있기 λ•Œλ¬Έμ— μ„±λŠ₯ μ΅œμ ν™”λ₯Ό μœ„ν•΄μ„œλŠ” 맀우 μ€‘μš”ν•œ API이닀. 이 APIλŠ” true / false 값을 λ¦¬ν„΄ν•˜κ³  true둜 λ°˜ν™˜ν•˜κ²Œ λœλ‹€λ©΄ render ν•¨μˆ˜κ°€ μ‹€ν–‰λœλ‹€. 즉 Virtual DOM에도 λžœλ”λ§μ„ 할지 말지 κ²°μ •ν•˜λŠ” ν•¨μˆ˜λΌκ³  μƒκ°ν•˜λ©΄ λœλ‹€.

getSnapshotBeforeUpdate

μ΄λŠ” λžœλ”λ§ν•˜κ³  λ°”λ‘œ λžœλ”λ§μ˜ 결과물이 λΈŒλΌμš°μ €μƒμ— 반영되기 λ°”λ‘œ 직전에 ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜μ΄λ‹€.

componentDidUpdate

Updating μž‘μ—…μ„ 마치고 μ»΄ν¬λ„ŒνŠΈκ°€ μ—…λ°μ΄νŠΈ λ˜μ—ˆμ„ λ•Œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜μ΄λ‹€.


πŸͺ¦ UnMounting

μ»΄ν¬λ„ŒνŠΈκ°€ 우리 λΈŒλΌμš°μ € μƒμ—μ„œ μ‚¬λΌμ§ˆ λ•Œ

그러면 μœ„μ— μžˆλŠ” μ‚¬μ§„μ˜ 각 API듀을 ν•˜λ‚˜μ”© μ•Œμ•„λ³΄μž

componentWillUnmount

μ–Έλ§ˆμš΄νŒ… κ³Όμ •μ—μ„œ μ»΄ν¬λ„ŒνŠΈκ°€ λΈŒλΌμš°μ €μ—μ„œ μ‚¬λΌμ§ˆ λ•Œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜μ΄λ‹€.