Lifecycle

1. κ°œμš”

Life Cycle은 λ¦¬μ•‘νŠΈ μ»΄ν¬λ„ŒνŠΈμ˜ 생λͺ…μ£ΌκΈ°λ₯Ό λœ»ν•œλ‹€. 즉, λ¦¬μ•‘νŠΈ μ»΄ν¬λ„ŒνŠΈκ°€ λΈŒλΌμš°μ €μƒμ— λ‚˜νƒ€λ‚˜κ³ , μ—…λ°μ΄νŠΈλ˜κ³ , μ‚¬λΌμ§€κ²Œ λ˜λŠ”λ° μ΄λŸ¬ν•œ 과정이 Life Cycle이고 μ΄λ•Œ 호좜 λ˜λŠ” λ©”μ„œλ“œκ°€ Life Cycle Method(생λͺ…μ£ΌκΈ° λ©”μ„œλ“œ)이닀.

생λͺ…μ£ΌκΈ° λ©”μ„œλ“œλŠ” ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œλ§Œ μ‚¬μš© ν•  수 있기 λ•Œλ¬Έμ— Life Cycleκ°œλ…μ— λŒ€ν•˜μ—¬ λ„ˆλ¬΄ λ§Žμ€ μ‹œκ°„μ„ μŸμ§€ μ•Šμ•„λ„ λœλ‹€. 단지 μ–΄λ–€ κ°œλ…μ΄κ΅¬λ‚˜ μ •λ„λ‘œ μ •λ¦¬ν•˜κ³  λ„˜μ–΄κ°€μž.


2. Life Cycle & Life Cycle Method

React LIfe Cycle

μœ„λŠ” λ¦¬μ•‘νŠΈ μ»΄ν¬λ„ŒνŠΈκ°€ 생성, μ—…λ°μ΄νŠΈ, 제거 될 λ•Œμ˜ 과정을 λ‚˜νƒ€λ‚Έ 그림이닀. 그림을 보면 각각의 κ³Όμ •μ—μ„œ ν˜ΈμΆœλ˜λŠ” λ©”μ„œλ“œκ°€ μžˆλ‹€. 이것이 Life Cycle Method이닀.

ν•˜λ‚˜ν•˜λ‚˜ μ‚΄νŽ΄λ³΄μž.


3. 마운트

μ»΄ν¬λ„ŒνŠΈκ°€ 생성(마운트)될 λ•Œ λ°œμƒν•˜λŠ” 생λͺ…μ£ΌκΈ° λ©”μ„œλ“œλŠ” μ•„λž˜μ™€ κ°™λ‹€.

  • constructor: μ»΄ν¬λ„ŒνŠΈμ˜ μƒμ„±μž λ©”μ„œλ“œ, μ»΄ν¬λ„ŒνŠΈκ°€ λ§Œλ“€μ–΄μ§€λ©΄ κ°€μž₯ λ¨Όμ € μ‹€ν–‰ 됨

  • getDerivedStateFromProps: props둜 λ°›μ•„μ˜¨ 것을 state에 λ„£μ–΄μ£Όκ³  싢을 λ•Œ μ‚¬μš©

  • render: μ»΄ν¬λ„ŒνŠΈλ₯Ό λ Œλ”λ§

  • componentDidMount: μ»΄ν¬λ„ŒνŠΈμ˜ 첫번째 λ Œλ”λ§μ΄ 마치고 λ‚˜λ©΄ ν˜ΈμΆœλ˜λŠ” λ©”μ„œλ“œ


4. μ—…λ°μ΄νŠΈ

μ»΄ν¬λ„ŒνŠΈκ°€ μ—…λ°μ΄νŠΈ λ˜λŠ” μ‹œμ μ— λ°œμƒν•˜λŠ” 생λͺ…μ£ΌκΈ° λ©”μ„œλ“œλŠ” μ•„λž˜μ™€ κ°™λ‹€.

  • getDerivedStateFromProps: λ§ˆμš΄νŠΈκ³Όμ •μ—μ„œ λ°œμƒν•œ 생λͺ…μ£ΌκΈ° λ©”μ„œλ“œμ™€ κ°™μŒ, μ»΄ν¬λ„ŒνŠΈμ˜ propsλ‚˜ stateκ°€ λ°”λ€Œμ—ˆμ„ λ•Œλ„ 호좜됨

  • shouldComponentUpdate: μ΅œμ ν™” ν•  λ•Œ μ‚¬μš©ν•˜λŠ” λ©”μ„œλ“œλ‘œ μ»΄ν¬λ„ŒνŠΈκ°€ λ¦¬λ Œλ”λ§ ν• μ§€ 말지λ₯Ό κ²°μ •ν•˜λŠ” λ©”μ„œλ“œ

  • render

  • getSnapshotBeforeUpdate: μ»΄ν¬λ„ŒνŠΈμ— λ³€ν™”κ°€ μΌμ–΄λ‚˜κΈ° μ§μ „μ˜ DOM μƒνƒœλ₯Ό κ°€μ Έμ˜¬ 수 있음. κ·Έ λ‹€μŒ λ°œμƒν•˜κ²Œ λ˜λŠ” componentDidUpdate ν•¨μˆ˜μ—μ„œ 이전 값을 μ‚¬μš© κ°€λŠ₯ν•˜κ²Œ 함

  • componentDidUpdate: λ¦¬λ Œλ”λ§μ„ 마치고, 화면에 μš°λ¦¬κ°€ μ›ν•˜λŠ” λ³€ν™”κ°€ λͺ¨λ‘ 반영되고 λ‚œ λ’€ ν˜ΈμΆœλ˜λŠ” λ©”μ„œλ“œ


5. μ–Έλ§ˆμš΄νŠΈ

μ»΄ν¬λ„ŒνŠΈκ°€ 제거(μ–Έλ§ˆμš΄νŠΈ)될 λ•Œ λ°œμƒν•˜λŠ” 생λͺ…μ£ΌκΈ° λ©”μ„œλ“œλŠ” μ•„λž˜μ™€ κ°™λ‹€.

  • componentWillUnmount: μ»΄ν¬λ„ŒνŠΈκ°€ ν™”λ©΄μ—μ„œ 사라지기 직전에 호좜


6. ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œμ˜ useEffect() ν›…

μ§€κΈˆκΉŒμ§€ μ‚΄νŽ΄λ³Έ 생λͺ…μ£ΌκΈ° λ©”μ„œλ“œλŠ” ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œ λ‹€λ£¨λŠ” 것듀이닀. μ΄λŸ¬ν•œ 생λͺ…μ£ΌκΈ° λ©”μ„œλ“œλ“€μ€ ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œλŠ” useEffect() ν›…μœΌλ‘œ κ΅¬ν˜„μ΄ κ°€λŠ₯ν•˜λ‹€.

μ•„λž˜μ˜ 3κ°€μ§€μ˜ 생λͺ…μ£ΌκΈ° λ©”μ„œλ“œλ₯Ό useEffect() ν›…μœΌλ‘œ κ΅¬ν˜„ν•˜λŠ” 것을 λ§ˆμ§€λ§‰μœΌλ‘œ 이번 챕터λ₯Ό λ§ˆλ¬΄λ¦¬ν•œλ‹€.

  • componentDidMount

    useEffect(() => {
      console.log("λ‚˜ 마운트 λ˜μ—ˆμ–΄!!!");
    }, []);
  • componentDidUpdate

    useEffect(() => {
      console.log("λ‚˜ 마운트 λ˜μ—ˆμ–΄!!!");
      console.log("그리고 user도 μ—…λ°μ΄νŠΈ 되면 또 μ‹€ν–‰λ˜!!!");
      // userλŠ” λ¦¬λ Œλ”λ§μ— 영ν–₯을 μ£Όμ–΄μ•Ό ν•˜λŠ” 값이어야 ν•œλ‹€.
      // ex) state, props
    }, [user]);
  • componentWillUnmount

    useEffect(() => {
      console.log("λ‚˜ 마운트 λ˜μ—ˆμ–΄!!!");
      return () => {
        console.log("λ‚˜ 이제 μ–Έλ§ˆμš΄νŠΈ 될거야ㅠㅠ");
      };
    }, []);

7. Conclusion

λ¦¬μ•‘νŠΈλ₯Ό λ°°μš°λ©΄μ„œ 생λͺ…μ£ΌκΈ° λ©”μ„œλ“œμ— λŒ€ν•΄ μžμ„Ένžˆ 배우기 λ³΄λ‹€λŠ” ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œμ˜ 생λͺ…μ£ΌκΈ° λ©”μ„œλ“œκ°€ ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œλŠ” μ–΄λ–»κ²Œ μ‚¬μš©μ΄ λ˜λŠ”μ§€μ— λŒ€ν•΄μ„œ useEffect() 훅을 톡해 μžμ„Ένžˆ λ°°μ› λ‹€. μ–΄λ–€ κ°•μ˜μ—μ„œλ„ useEffect() 훅에 λŒ€ν•΄ μžμ„Ένžˆ μ„€λͺ…을 ν•΄μ£Όκ³  μ˜ˆμ‹œλ„ 많이 λ“€μ–΄μ£Όμ–΄ μ€‘μš”ν•˜λ‹€λŠ” 것을 μ•Œκ²Œ λ˜μ—ˆκ³  ν™•μ‹€νžˆ ν”„λ‘œμ νŠΈμ—μ„œ μœ μš©ν•˜κ²Œ μ‚¬μš©λœλ‹€. ν΄λž˜μŠ€ν˜• μ»΄ν¬λ„ŒνŠΈμ˜ 생λͺ…μ£ΌκΈ° λ©”μ„œλ“œλ„ ν•œ λ•Œ λ„ˆλ¬΄ μ€‘μš”ν•΄μ„œ κΌ­ μ•Œμ•„μ•Ό ν•˜λŠ” κ°œλ…μ΄μ—ˆλ‹€κ³  μƒκ°ν•œλ‹€. μ§€κΈˆ React Hooks 처럼 말이닀. 그리고 μ–Έμ  κ°€ React Hooks도 λ‹€λ₯Έ 획기적인 λ¬΄μ–Έκ°€λ‘œ λŒ€μ²΄λ˜λŠ” 날이 μ˜€κ² μ§€? React도...


μ°Έκ³ 

25. LifeCycle Method


πŸ“… 2022-07-12

Last updated