개발/Vue.js

Vue 생λͺ…μ£ΌκΈ°

1mj 2022. 4. 13. 18:04

Vue μΈμŠ€ν„΄μŠ€ 라이프 사이클

μΈμŠ€ν„΄μŠ€ 생성 μ‹œ 데이터 κ΄€μ°°, ν…œν”Œλ¦Ώ 컴파일, DOM 에 객체 μ—°κ²°, 데이터 λ³€κ²½ μ‹œ DOM 을 μ—…λ°μ΄νŠΈ ν•˜κ²Œ λœλ‹€.

 

β‘  Creation: μ»΄ν¬λ„ŒνŠΈ μ΄ˆκΈ°ν™” λ‹¨κ³„
μ»΄ν¬λ„ŒνŠΈκ°€ DOM에 μΆ”κ°€λ˜κΈ° μ „, ν΄λΌμ΄μ–ΈνŠΈλ‹¨κ³Ό μ„œλ²„λ‹¨ λ Œλ”λ§ λͺ¨λ‘μ—μ„œ μ²˜λ¦¬ν•΄μ•Ό ν•  일둜 아직 μ»΄ν¬λ„ŒνŠΈκ°€ 돔에 μΆ”κ°€λ˜κΈ° 전이기 λ•Œλ¬Έμ— 돔에 μ ‘κ·Όν•˜κ±°λ‚˜ this.$elλ₯Ό μ‚¬μš©ν•  수 μ—†λ‹€.

- beforeCreate
Vue.JS의 라이프 사이클 ν›… μ€‘μ—μ„œ κ°€μž₯ λ¨Όμ € μ‹€ν–‰ λ˜λŠ” ν›…μž…λ‹ˆλ‹€. data와 이벀트($on, $once, $off, $emit), κ°μ‹œμž($watch)등이 μ„€μ • 되기 전에 ν˜ΈμΆœλ˜λŠ” 라이프 사이클 훅이닀.
- created
data, computed, methods, watch λ“±κ³Ό 같은 μ˜΅μ…˜ 섀정이 μ™„λ£Œλœ μ‹œμ μ΄κΈ° λ•Œλ¬Έμ—, data 등을 μ‚¬μš©ν•  수 μžˆλ‹€. ν•˜μ§€λ§Œ 아직 DOM에 μ»΄ν¬λ„ŒνŠΈκ°€ 마운트 λ˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— $el은 μ‚¬μš©ν•  수 μ—†λ‹€.

β‘‘ Mounting: DOM μ‚½μž… λ‹¨κ³„
초기 λ Œλ”λ§ 직전에 μ»΄ν¬λ„ŒνŠΈμ— 직접 μ ‘κ·Ό, μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§μ—μ„œλŠ” μ§€μ›ν•˜μ§€ μ•ŠλŠ”λ‹€.
- beforeMount
μ»΄ν¬λ„ŒνŠΈ μ΄ˆκΈ°μ— dataκ°€ μ„ΈνŒ…λ˜μ–΄μ•Ό ν•œλ‹€λ©΄ created 라이프 사이클 훅을, λ Œλ”λ§ 되고 DOM을 λ³€κ²½ν•΄μ•Ό ν•œλ‹€λ©΄ mounted 라이프 사이클 훅을 μ‚¬μš©ν•˜λ©΄ 되기 λ•Œλ¬Έμ—, 거의 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 라이프 사이클 훅이닀.
- mounted
μ»΄ν¬λ„ŒνŠΈκ°€ DOM에 μΆ”κ°€ 된 ν›„ ν˜ΈμΆœλ˜λŠ” 라이프 사이클 훅이닀. μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§μ€ μ§€μ›ν•˜μ§€ μ•ŠλŠ”λ‹€.

$el을 μ‚¬μš©ν•˜μ—¬ DOM에 μ ‘κ·Ό ν•  수 μžˆλ‹€. mounted 훅이 ν˜ΈμΆœλ˜μ—ˆλ‹€κ³  λͺ¨λ“  μ»΄ν¬λ„ŒνŠΈκ°€ 마운트 λ˜μ—ˆλ‹€κ³  보μž₯ν•  μˆ˜λŠ” μ—†λ‹€.

전체가 λ Œλ”λ§ 보μž₯된 μƒνƒœμ—μ„œ μž‘μ—…μ„ ν•˜κΈ° μœ„ν•΄μ„œλŠ” $nextTick을 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
λΆ€λͺ¨μ™€ μžμ‹ κ΄€κ³„μ˜ μ»΄ν¬λ„ŒνŠΈμ—μ„œ μš°λ¦¬κ°€ μƒκ°ν•œ μˆœμ„œλ‘œ mountedκ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” μ μ΄λ‹€. μ¦‰ λΆ€λͺ¨μ˜ mounted훅이 μžμ‹μ˜ mounted훅보닀 λ¨Όμ € μ‹€ν–‰λ˜μ§€ μ•ŠλŠ”λ‹€. μ˜€νžˆλ € κ·Έ λ°˜λŒ€μ΄λ‹€.

β‘’ Updating: Diff λ° μž¬λ Œλ”링 λ‹¨κ³„
μ»΄ν¬λ„ŒνŠΈμ—μ„œ μ‚¬μš©λ˜λŠ” λ°˜μ‘ν˜• 속성듀이 λ³€κ²½λ˜κ±°λ‚˜ μ–΄λ–€ 이유둜 재 λ Œλ”λ§μ΄ λ°œμƒλ˜λ©΄ μ‹€ν–‰, μ„œλ²„ λ Œλ”λ§μ—μ„œλŠ” ν˜ΈμΆœλ˜μ§€ μ•ŠλŠ”λ‹€.
- beforeUpdate
μ—…λ°μ΄νŠΈ 된 값듀을 κ°€μ§€κ³  μžˆλŠ” μƒνƒœμ΄κΈ° λ•Œλ¬Έμ—, μ—…λ°μ΄νŠΈ 된 κ°’μœΌλ‘œ λ‹€λ₯Έ 값듀을 μ—…λ°μ΄νŠΈ ν•  수 μžˆλ‹€. 이 ν›…μ—μ„œ 값이 λ³€κ²½λ˜λ”λΌλ„ λ‹€μ‹œ beforeUpdate 훅이 호좜 λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ—, λ¬΄ν•œ 루프에 빠질 걱정은 ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.
- updated
DOM이 μ—…λ°μ΄νŠΈ 된 ν›„ 호좜 λ˜λŠ” 훅이기 λ•Œλ¬Έμ— λ³€κ²½ 된 ν›„μ˜ DOM을 μ΄μš©ν•΄μ•Ό ν•˜λŠ” 처리λ₯Ό ν•  λ•Œ μ‚¬μš©ν•˜κΈ° μœ μš©ν•œ 훅이닀. mounted ν›…κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ 재 λ Œλ”λ§μ΄ λλ‚¬λ‹€λŠ” 것이 보μž₯된 μƒνƒœμ—μ„œ μž‘μ—…ν•˜κΈ° μœ„ν•΄μ„œλŠ” $nextTick을 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€. beforeUpdate ν›…κ³Ό λ‹€λ₯΄κ²Œ updated ν›…μ—μ„œ dataλ₯Ό μˆ˜μ •ν•˜κ²Œ 되면 update 훅이 호좜 되기 λ•Œλ¬Έμ— λ¬΄ν•œ 루프에 빠질 수 μžˆμœΌλ‹ˆ μœ μ˜ν•΄μ•Ό ν•œλ‹€.

β‘£ Destroy: μ»΄ν¬λ„ŒνŠΈ μ œκ±° μ‹œ μ‹€ν–‰
- beforeDestroy
μ»΄ν¬λ„ŒνŠΈκ°€ 제거 되기 직전에 ν˜ΈμΆœλ˜λŠ” 라이프 사이클 훅이닀. 이 ν›…μ—μ„œ μ»΄ν¬λ„ŒνŠΈλŠ” 본래의 κΈ°λŠ₯듀을 κ°€μ§€κ³  μžˆλŠ” μ˜¨μ „ν•œ μƒνƒœμ΄λ‹€. 이 ν›…μ—μ„œ 이벀트 λ¦¬μŠ€λ„ˆλ₯Ό ν•΄μ œν•˜κ±°λ‚˜ μ»΄ν¬λ„ŒνŠΈμ—μ„œ λ™μž‘μœΌλ‘œ ν• λ‹Ή 받은 μžμ›λ“€μ€ ν•΄μ œν•΄μ•Ό ν•  λ•Œ μ‚¬μš©ν•˜κΈ° μ ν•©ν•œ 훅이닀. μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§μ„ μ§€μ›ν•˜μ§€ μ•ŠλŠ”λ‹€.
- destroyed
μ»΄ν¬λ„ŒνŠΈκ°€ 제거 된 ν›„ ν˜ΈμΆœλ˜λŠ” 라이프 사이클 훅이닀. μ»΄ν¬λ„ŒνŠΈμ˜ λͺ¨λ“  이벀트 λ¦¬μŠ€λ„ˆ(@click, @change λ“±..)와 λ””λ ‰ν‹°λΈŒ(v-model, v-show λ“±..)의 바인딩이 ν•΄μ œ 되고, ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈλ„ λͺ¨λ‘ μ œκ±°λœλ‹€. μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§μ„ μ§€μ›ν•˜μ§€ μ•ŠλŠ”λ‹€.

 

라이프사이클 ν›… μ„€λͺ…
beforeCreate Vue μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λ˜κ³  κ°€μž₯ 처음으둜 μ‹€ν–‰λ˜λŠ” 단계
μΈμŠ€ν„΄μŠ€μ˜ data 와 methods 속성과 ν™”λ©΄ μš”μ†Œκ°€ μ •μ˜λ˜μ–΄ μžˆμ§€ μ•Šμ•„ μ ‘κ·Όν•  수 μ—†μŒ
created Vue μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λ˜μ—ˆκ³  data 와 methods 속성이 μ •μ˜λ˜μ–΄ 두 속성 값이 μ ‘κ·Ό κ°€λŠ₯
ν™”λ©΄ μš”μ†Œμ— μΈμŠ€ν„΄μŠ€κ°€ μ—°κ²°λ˜κΈ° μ „μœΌλ‘œ template 속성에 μ •μ˜λœ λ”μ—λŠ” μ ‘κ·Όν•  수 μ—†μŒ
beforeMount template 속성에 μ§€μ •ν•œ λ§ˆν¬μ—… 속성을 render() ν•¨μˆ˜λ‘œ λ³€ν™˜ν•œ ν›„ el 속성에 μ§€μ •ν•œ ν™”λ©΄ μš”μ†Œμ— μΈμŠ€ν„΄μŠ€λ₯Ό λΆ€μ°©ν•˜κΈ° 직전에 호좜
mounted el μ†μ„±μ—μ„œ μ§€μ •ν•œ ν™”λ©΄ μš”μ†Œμ— μΈμŠ€ν„΄μŠ€κ°€ μ—°κ²°λœ ν›„ 호좜
template 속성에 μ •μ˜λœ 돔에 μ ‘κ·Όν•˜μ—¬ ν™”λ©΄ μš”μ†Œ μ œμ–΄ κ°€λŠ₯
beforeUpdate μΈμŠ€ν„΄μŠ€ 속성이 화면에 μ—°κ²°λ˜κ³  κ΄€μ°°ν•˜λŠ” 데이터가 λ³€κ²½λ˜μ—ˆμ„ λ•Œ 화면에 반영되기 전에 호좜
updated 데이터가 λ³€κ²½λ˜κ³  λ‚˜μ„œ ν™”λ©΄ μš”μ†Œ μ œμ–΄ κ°€λŠ₯
beforeDestroy Vue μΈμŠ€ν„΄μŠ€κ°€ μ—†μ–΄μ§€κΈ° 직전에 호좜
destroyed Vue μΈμŠ€ν„΄μŠ€κ°€ μ—†μ–΄μ§€κ³  λ‚œ ν›„ 호좜

 

참고자료 및 좜처 πŸ™‡‍♂️

https://v3.ko.vuejs.org/guide/composition-api-lifecycle-hooks.html

https://hyeooona825.tistory.com/40