💡 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 (소멸)