2020/03/19
모든 Vue는 새로운 Vue 인스턴스를 만드는 것 부터가 시작.
const vm = new Vue({
//옵션
});
console.log(vm);
인스턴스를 생성하고 나면 인스턴스 안에 어떤 속성과 API가 있는 console창에서 확인 할 수 있다.
인스턴스에서 사용할 수 있는 속성과 API는 아래와 같다.
new Vue ({
el: ,
template: ,
data: ,
methods: ,
created: ,
watch: ,
})
앞으로 공부해나가면서 자세하게 알아보도록 하겠습니다.
vue의 인스턴스가 생성되어 소멸되기까지 거치는 과정을 의미한다. 간단하게 살표보면
Vue 인스턴스는 크게 생성(create)
-> DOM부착(mount)
-> 업데이트(update)
-> 사라짐(destory)
4가지 과정을 거친다.
Vue의 라이프 사이클을 이해해야 하는 이유는 라이프 사이클 훅 때문. 라이플 사이클 훅으로 인스턴스의 특정 시점에 원하는 로직을 구현할 수 있다.
this
context를 인스턴스에 바인딩 한다. (데이터, 계산된 속성 및 메소드에 접근 가능)var app = new Vue({
el: '#app',
data() {
return {
msg: 'hello';
}
},
beforeCreate(function() {
console.log(this.msg); // undefined
})
})
this.$el
에 접근할 수 없고, data, event 에도 접근하기 전이기 때문에 data, methods에도 접근할 수 없다
.var app = new Vue({
el: '#app',
data() {
return {
msg: 'hello';
}
},
created(function() {
console.log(this.msg); // hello
})
})
computed
, methods
, watch
에 접근이 가능하게 된다.var app = new Vue({
el: '#app',
beforeMount(function() {
console.log('beforeMount');
})
})
var app = new Vue({
el: '#app',
mounted(function() {
console.log('mounted');
})
})
this.$el
, data
, computed
, methods
, watch
등 모든 요소에 접근이 가능하다.부모와 자식 component 간의 mounted 훅 순서는 위의 이미지 처럼 부모 component의 mounted 훅
은 항상 자식 component의 mounted 훅 이후에 발생
한다는 것을 알 수 있다.
var app = new Vue({
el: '#app',
mounted(function() {
this.$nextTick(function() {
// 모든 화면이 렌더링된 후 실행합니다.
})
})
})
자식 components가 서버에서 비동기로 데이터를 받아오는 경우처럼, 부모의 mounted 훅이 모든 자식 components가 마운트 된 상태를 보장하지는 않는다.
이때에는 this.$nextTick
을 이용하여 모든 화면이 렌더링 된 이후에 실행되게 하여 mounted 상태를 보장할 수 있다.
var app = new Vue({
el: '#app',
beforeUpdate(function() {
console.log('beforeUpdate');
})
})
component에서 사용되는 data의 값이 변함에 따라, DOM에도 변화를 주어 렌더링을 다시 해야할 때에, 변화 직전에 호출되는 것이 beforeUpdate 훅이다.
var app = new Vue({
el: '#app',
updated(function() {
console.log('beforeUpdate');
})
})
가상 DOM을 렌더링하고 실제 DOM이 변경된 이후에 호출되는 것이 updated 훅이다.
변경된 데이터가 실제 DOM에 적용이 된 상태. 변경된 값들을 DOM을 이용해 접근하고 싶다면, updated 훅이 가장 적절하다.
this.$nextTick
을 이용하여, 모든 화면에 업데이트 된 이후의 상태를 보장할 수 있다.var app = new Vue({
el: '#app',
beforeDestroy(function() {
console.log('beforeDestroy');
})
})
해당 인스턴스가 없어지기 직전에 beforeDestory 훅이 호출된다. 아직 사라지기 전이기 때문에, 인스턴스의 모든 속성에 접근이 가능하다.
var app = new Vue({
el: '#app',
destroyed(function() {
console.log('destroyed');
})
})
인스턴스가 사라지고 난 직후에 destoryed 훅이 호출된다. 없어진 다음이기 때문에, 인스터스 속성에 접근할 수 없다. 하위 Vue 인스턴스 역시 삭제된다.