FrontEnd/React & React-Native

[React] Component Lifecycle

devwoodie 2023. 3. 14. 23:29
728x90
λ°˜μ‘ν˜•

πŸ“ λͺ¨λ“  React Componentμ—λŠ” Lifecycle(수λͺ… μ£ΌκΈ°)이 μ‘΄μž¬ν•©λ‹ˆλ‹€.
Component의 수λͺ…은 νŽ˜μ΄μ§€μ— λ Œλ”λ§λ˜κΈ° μ „ μ€€λΉ„ κ³Όμ •μ—μ„œ μ‹œμž‘ν•˜μ—¬ νŽ˜μ΄μ§€μ—μ„œ μ‚¬λΌμ§ˆ λ•Œ λλ‚©λ‹ˆλ‹€.
라이프 사이클 λ©”μ„œλ“œλŠ” ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œλ§Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

라이프 사이클 λ©”μ„œλ“œμ˜ μ’…λ₯˜λŠ” 총 아홉 κ°€μ§€μž…λ‹ˆλ‹€.
Will 접두사가 뢙은 λ©”μ„œλ“œλŠ” μ–΄λ–€ μž‘μ—…μ„ μž‘λ™ν•˜κΈ° 전에 μ‹€ν–‰λ˜λŠ” λ©”μ„œλ“œμ΄κ³ , Did 접두사가 뢙은 λ©”μ„œλ“œλŠ” μ–΄λ–€ μž‘μ—…μ„ μž‘λ™ν•œ 후에 μ‹€ν–‰λ˜λŠ” λ©”μ„œλ“œμž…λ‹ˆλ‹€.

라이프 사이클은 총 μ„Έκ°€μ§€, Mount, Update, Unmount 둜 λ‚˜λˆ•λ‹ˆλ‹€.

πŸ“œ Mount

  • DOM이 μƒμ„±λ˜κ³  μ›Ή λΈŒλΌμš°μ €μƒμ— λ‚˜νƒ€λ‚˜λŠ” 것을 마운트(Mount)라고 ν•©λ‹ˆλ‹€.

μ΄λ•Œ ν˜ΈμΆœν•˜λŠ” λ©”μ„œλ“œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  • constructor : μ»΄ν¬λ„ŒνŠΈλ₯Ό μƒˆλ‘œ λ§Œλ“€ λ•Œλ§ˆλ‹€ ν˜ΈμΆœλ˜λŠ” 클래슀 μƒμ„±μž λ©”μ„œλ“œ
  • getDerivedStateFromProps : props에 μžˆλŠ” 값을 state에 넣을 λ•Œ μ‚¬μš©ν•˜λŠ” λ©”μ„œλ“œ
  • render : μ€€λΉ„ν•œ λ‹€μŒ UIλ₯Ό λ Œλ”λ§ν•˜λŠ” λ©”μ„œλ“œ
  • componentDidMount : μ»΄ν¬λ„ŒνŠΈκ°€ μ›Ή λΈŒλΌμš°μ €μƒμ— λ‚˜νƒ€λ‚œ ν›„ ν˜ΈμΆœν•˜λŠ” λ©”μ„œλ“œ

πŸ“œ Update

μ»΄ν¬λ„ŒνŠΈλŠ” μ•„λž˜ λ„€ κ°€μ§€μ˜ 경우 μ—…λ°μ΄νŠΈ(Update)λ₯Ό ν•©λ‹ˆλ‹€.

  • propsκ°€ λ°”λ€” λ•Œ
  • stateκ°€ λ°”λ€” λ•Œ
  • λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈκ°€ λ¦¬λ Œλ”λ§λ  λ•Œ
  • this.forceUpdates둜 κ°•μ œλ‘œ λ Œλ”λ§μ„ νŠΈλ¦¬κ±°ν•  λ•Œ

μ΄λ ‡κ²Œ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ—…λ°μ΄νŠΈν•  λ•ŒλŠ” λ‹€μŒ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.

  • getDerivedStateFromProps : 이 λ©”μ„œλ“œλŠ” 마운트 κ³Όμ •μ—μ„œλ„ 호좜되며, μ—…λ°μ΄νŠΈκ°€ μ‹œμž‘ν•˜κΈ° 전에도 ν˜ΈμΆœλ©λ‹ˆλ‹€. props의 변화에 따라 state 값에도 λ³€ν™”λ₯Ό μ£Όκ³  싢을 λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.
  • shouldComponentUpdated : μ»΄ν¬λ„ŒνŠΈκ°€ λ¦¬λ Œλ”λ§μ„ ν•΄μ•Ό ν• μ§€ 말아야 ν• μ§€λ₯Ό κ²°μ •ν•˜λŠ” λ©”μ„œλ“œμž…λ‹ˆλ‹€. 이 λ©”μ„œλ“œμ—μ„œλŠ” true ν˜Ήμ€ false 값을 λ°˜ν™˜ν•΄μ•Ό ν•˜λ©°, trueλ₯Ό λ°˜ν™˜ν•˜λ©΄ λ‹€μŒ 라이프사이클 λ©”μ„œλ“œλ₯Ό 계속 μ‹€ν–‰ν•˜κ³ , falseλ₯Ό λ°˜ν™˜ν•˜λ©΄ μž‘μ—…μ„ μ€‘μ§€ν•©λ‹ˆλ‹€. 즉, μ»΄ν¬λ„ŒνŠΈκ°€ λ¦¬λ Œλ”λ§ λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • render : μ»΄ν¬λ„ŒνŠΈλ₯Ό λ¦¬λ Œλ”λ§ν•©λ‹ˆλ‹€.
  • getSnapshotBeforeUpdate : μ»΄ν¬λ„ŒνŠΈ λ³€ν™”λ₯Ό DOM에 λ°˜μ˜ν•˜κΈ° λ°”λ‘œ 직전에 ν˜ΈμΆœν•˜λŠ” λ©”μ„œλ“œμž…λ‹ˆλ‹€.
  • componenetDidUpdate : μ»΄ν¬λ„ŒνŠΈμ˜ μ—…λ°μ΄νŠΈ μž‘μ—…μ΄ λλ‚œ ν›„ ν˜ΈμΆœν•˜λŠ” λ©”μ„œλ“œμž…λ‹ˆλ‹€.

πŸ“œ Unmount

마운트의 λ°˜λŒ€ κ³Όμ •, 즉 μ»΄ν¬λ„ŒνŠΈλ₯Ό DOMμ—μ„œ μ œκ±°ν•˜λŠ” 것을 μ–Έλ§ˆμš΄νŠΈ(Unmount)라고 ν•©λ‹ˆλ‹€.

  • componentWillUnmount : μ»΄ν¬λ„ŒνŠΈκ°€ μ›Ή λΈŒλΌμš°μ €μƒμ—μ„œ 사라지기 전에 ν˜ΈμΆœν•˜λŠ” λ©”μ„œλ“œμž…λ‹ˆλ‹€.
728x90
λ°˜μ‘ν˜•