생λͺ…μ£ΌκΈ° (Life Cycle)

뷰의 라이프 사이클은 크게 λ‹€μŒ λ„€κ°€μ§€λ‘œ λ‚˜λ‰œλ‹€.

  • Creation
  • Mounting
  • Updating
  • Destruction

μ΄λŠ” 각 λ‹¨κ³„λ§ˆλ‹€ μ•„λž˜μ™€ 같은 νŠΉμ§•μ΄ μžˆλ‹€.

λ·° 라이프 사이클

Creation :: μ»΄ν¬λ„ŒνŠΈ μ΄ˆκΈ°ν™”

μ»΄ν¬λ„ŒνŠΈ μ΄ˆκΈ°ν™” 단계

beforeCreate

  • λͺ¨λ“  ν›… μ€‘μ—μ„œ κ°€μž₯ λ¨Όμ € μ‹€ν–‰λ˜λŠ” ν›…
  • data 와 event κ°€ μ„ΈνŒ…λ˜μ§€ μ•ŠλŠ” μ‹œμ μœΌλ‘œ μ ‘κ·Όν•˜λ©΄ μ—λŸ¬λ₯Ό λΏœλŠ”λ‹€.
<script>
  export default {
    data() {
      return {};  
    },
    beforeCreate() {
      /* statement */
    }
  }
</script>

created

  • data 와 event κ°€ ν™œμ„±ν™” λ˜μ–΄ μ ‘κ·Ό κ°€λŠ₯ν•œ μƒνƒœ
  • Template κ³Ό VirtualDOM 은 λžœλ”λ§λ˜μ§€ μ•ŠλŠ” μƒνƒœμ΄λ‹€.
<script>
  export default {
    data() {
      return {};
    },
    created() {
      /* statement */
    }
  }
</script>

Mounting :: DOM μ‚½μž… 단계

  • 초기 λžœλ”λ§ 직전에 μ»΄ν¬λ„ŒνŠΈμ— μ ‘κ·Ό κ°€λŠ₯ν•œ μƒνƒœ (SSR 지원 λΆˆκ°€)

beforeMount

<script>
  export default {
    beforeMount() {
      /* statement */
    }
  }
</script>

mounted

  • μ»΄ν¬λ„ŒνŠΈ, ν…œν”Œλ¦Ώ, λžœλ”λ§λœ DOM 에 μ ‘κ·Όν•  수 μžˆλ‹€.
  • λͺ¨λ“  ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈκ°€ 마운트된 μƒνƒœλ₯Ό 보μž₯ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • vm.$nextTick λ₯Ό μ‚¬μš©ν•˜λ©΄ 전체가 λžœλ”λ§λœ μƒνƒœλ₯Ό 보μž₯ν•  수 μžˆλ‹€. (SSR 지원 λΆˆκ°€)
<script>
  export default {
    mounted() {
      this.$nextTick(() => {
        /* λͺ¨λ“  화면이 λžœλ”λ§λœ ν›„ 싀행함 */
      });
    }
  }
</script>

λΆ€λͺ¨ μžμ‹ κ΄€κ³„μ˜ Mount 관계에 μžˆμ„ κ²½μš°μ—λŠ” λ‹€μŒ μˆœμ„œλ₯Ό 보μž₯ν•œλ‹€.

λ·° 라이프 사이클

Updating :: Diff 및 재 λžœλ”λ§ 단계

beforeUpdate

  • μ»΄ν¬λ„ŒνŠΈμ˜ 데이터가 λ³€ν•˜μ—¬ μ—…λ°μ΄νŠΈ 사이클이 μ‹œμž‘λ λ•Œ μ‹€ν–‰
  • DOM이 재 λžœλ”λ§λ˜κ³  Fetch 되기 직전에 μ‹€ν–‰
  • 재 λžœλ”λ§λ˜κΈ° μ΄μ „μ˜ μƒˆ μƒνƒœμ˜ 데이터λ₯Ό μ–»μ„μˆ˜ 있으며 더 λ§Žμ€ 변경이 κ°€λŠ₯ν•˜λ‹€.
  • 이 λ³€κ²½μœΌλ‘œμΈν•œ 재 λžœλ”λ§μ€ 트리거 λ˜μ§€ μ•ŠλŠ”λ‹€.
<script>
  export default {
    beforeUpdate() {
      /* statement */
    }
  }
</script>

updated

  • μ»΄ν¬λ„ŒνŠΈ 데이터가 λ³€ν•˜μ—¬ 재 λžœλ”λ§μ΄ μΌμ–΄λ‚œ ν›„ μ‹€ν–‰λœλ‹€.
  • DOM이 μ—…λ°μ΄νŠΈ μ™„λ£Œλœ μƒνƒœμ΄λ―€λ‘œ DOM의 쒅속적인 연산을 ν•  수 μžˆλ‹€.
  • μ—¬κΈ°μ„œ μƒνƒœλ₯Ό λ³€κ²½ν•˜λ©΄ λ¬΄ν•œλ£¨ν”„μ— 빠질수 μžˆλ‹€.
  • vm.$nextTick λ₯Ό μ‚¬μš©ν•˜λ©΄ 전체가 재 λžœλ”λ§λœ μƒνƒœλ₯Ό 보μž₯ν•  수 μžˆλ‹€.
<script>
  export default {
    updated() {
      this.$nextTick(() => {
        /* λͺ¨λ“  화면이 재 λžœλ”λ§λœ ν›„ 싀행함 */
      });
    }
  }
</script>

Destruction :: 해체 단계

beforeDestroy

  • λ·° μΈμŠ€ν„΄μŠ€ 제거되기 직전에 호좜
  • μ»΄ν¬λ„ŒνŠΈμ˜ μ›λž˜ λͺ¨μŠ΅κ³Ό κΈ°λŠ₯듀을 κ·ΈλŒ€λ‘œ 가지고 μžˆλ‹€.
  • 이벀트 λ¦¬μŠ€λ„ˆλ₯Ό 제거 ν•˜κ±°λ‚˜ reactive subscription 을 제거 ν•˜κ³ μž ν•  λ•Œ μ‚¬μš©ν•œλ‹€. (SSR 지원 λΆˆκ°€)
<script>
  export default {
    beforeDestroy() {
      /* statement */
    }
  }
</script>

destroyed

  • λ·° μΈμŠ€ν„΄μŠ€ 제거된 ν›„ ν˜ΈμΆœλœλ‹€. (SSR 지원 λΆˆκ°€)
  • λͺ¨λ“  이벀트 λ¦¬μŠ€λ„ˆκ°€ μ œκ±°λœλ‹€.
  • λͺ¨λ“  ν•˜μœ„ (μžμ‹) λ¦¬μŠ€λ„ˆκ°€ μ œκ±°λœλ‹€.
<script>
  export default {
    destroyed() {
      /* statement */
    }
  }
</script>