Vue 인스턴스는 크게 생성(create
)되고, DOM에 부착(mount
)되고, 내용이 갱신(update
)되며, 소멸(destroy
)되는 4가지 과정을 거치게 된다.
인스턴스가 생명 주기를 거치는 동안 hook
을 사용할 수 있도록 API를 제공한다.
일반적으로 많이 사용하는 hook
은 beforeCreate
, created
, beforeMount
, mounted
, beforeUpdate
, updated
, beforeUnmount
, unmounted
가 있다.
DOM
에 추가되기 전이라서 this.$el
등에 접근할 수 없다.data
, method
등 속성이 아직 인스턴스에 정의되어 있지 않아서 화면 요소에 접근할 수 없다.setup()
혹은 옵션 API의 어떤 훅보다 빨리 호출된다. (beforeCreate()
보다 먼저 호출됨)const vue = new Vue({
el: '#app',
data() {
return {
msg: 'Hello Vue!';
}
},
beforeCreate() {
console.log(this.msg); // undefined
},
})
data
, method
등 인스턴스 관련 모든 옵션이 정의된 단계template
속성에 정의된 요소엔 접근할 수 없다.data
, method
등이 활성화되어 접근이 가능하다.data
에 직접 접근이 가능해서 서버에서 받아온 데이터로 로직을 수행하거나 이벤트 리스너를 선언하기 좋다.const vue = new Vue({
el: '#app',
data() {
return {
msg: 'Hello Vue!';
}
},
created() {
console.log(this.msg); // Hello Vue!
},
})
created
단계에서 템플릿 유무를 확인하고 렌더링한 상태이므로 가상 DOM이 생성되어 있지만 실제 DOM에 부착하진 않은 상태이다.const app = new Vue({
el: '#app',
beforeMount(function() {
console.log('beforeMount');
})
})
this.$el
에 접근이 가능하다.<Suspense>
트리 내부 컴포넌트는 포함하지 않는다.mounted
훅은 자식 컴포넌트의 mounted
훅 이후 실행된다.const app = new Vue({
el: '#app',
mounted(function() {
console.log('mounted');
})
})
const app = new Vue({
el: '#app',
beforeUpdate(function() {
console.log('beforeUpdate');
})
})
update
훅은 자식 컴포넌트의 update
훅 이후에 호출된다.const app = new Vue({
el: '#app',
updated(function() {
console.log('updated');
})
})
💡 이 단계에서 상태값을 변경하는 것은 무한 루프를 일으킬 수 있다.
const app = new Vue({
el: '#app',
beforeUnmount(function() {
console.log('beforeUnmount');
})
})
const app = new Vue({
el: '#app',
unmounted(function() {
console.log('unmounted');
})
})