💡 Vue.js 인스턴스와 라이프 사이클 훅에 대해 알아보자 💡
📌 인스턴스와 라이프 사이클의 이해를 기반으로 Vue.js 개발시 정말 큰 도움이 되고, 오류 및 문제 발생 시 빠른 해결이 가능하다!
var vm = new Vue({ // vm : ViewModel의 약자 });
Vue 인스턴스가 생성될 때 data 객체에 있는 모든 속성이 Vue의 반응형 시스템에 추가
속성값이 변경될 때마다 새로운 값과 일치하도록 업데이트 된다!
var mydata = {a : 1};
var vm = new Vue({
data : mydata
});
// vm.a === mydata.a
vm.a = 2;
data.a = 2;
data.a = 3;
vm.a = 3;
Object.freeze()
기존 속성이 변경되는 것을 막을 수 있다.
반응형 시스템이 시스템이 추적할 수 없다.
var obj = {
foo : 'bar'
};
Object.freeze(obj);
new Vue({
el : '#app',
data : obj
});
// obj의 bar는 더이상 변하지 않는다.
Vue.js 를 활용해 개발할 때, 어느 시점에 데이터가 바인딘 되는지, 어떤 시점에 함수를 호출해야되는지에 대한 어려움이 있었다.
- LifeCycle을 이해하면 위의 어려움을 극복해가는데 도움이 될 것이라고 생각한다.
LifeCycle : Vue 인스턴스가 생성된 후 우리 눈에 보여지고, 사라지기 까지의 단계
beforeCreate (생성)
this.$el, 인스턴스의 데이터와 메소드에 접근 불가 created (생성)
데이터를 반응형으로 추적 가능!
computed, watch, 메소드에 접근은 가능!
그러나, 아직 DOM에 추가되지 않은 상태
beforeMount (부착)
mounted (부착)
가상 DOM의 내용이 실제 DOM에 부착되고 난 이후에 실행
this.$el, 인스턴스의 데이터와 메소드 등 모든 Vue 인스턴스에 접근 가능부모 - 자식
실제로 Vue를 활용해 개발하면 부모-자식 관계의 Component 가 다수 발생한다.
부모의 mounted 훅은 자식의 created & mounted가 수행된 후 수행된다.
부모의 mounted 훅이 모든 자식 Component의 mounted 를 보장하지 않는다.
this.$nextTick 을 이용해 모든 자식 Component의 mounted 를 보장할 수 있다.
new Vue({
el : '#app',
mounted(function(){
this.$nextTick(function(){
// 모든 화면이 랜더링 된 후에 실행
});
});
});
beforeUpdate (갱신)
updated (갱신)
this.$nextTick 를 이용해 모든 화면이 업데이트된 이후의 상태를 보장받을 수 있다.beforeDestroy (소멸)
destoryed (소멸)