- Reference : https://kr.vuejs.org/v2/guide/instance.html
- Init Events & LifeCycle ์งํ ๊ฐ์ฅ ์ฒ์์ผ๋ก ์คํ๋๋ ๋จ๊ณ.
- ์ธ์คํด์ค๋ ์์ฑ๋์์ผ๋ ์์ง ์์ฑ์ด ์ ์๋์ง ์์๋ค.
- ๋์ ์ ๊ทผํ ์ ์๋ค.
- data ์์ฑ๊ฐ๊ณผ methods ์์ฑ๊ฐ์ ์ ๊ทผ ๊ฐ๋ฅํ ๊ฐ์ฅ ์ฒซ๋ฒ์งธ ๋จ๊ณ.
- ์ธ์คํด์ค๊ฐ ๋์ ๋ถ์ฐฉ๋๊ธฐ ์ .
- template ์์ฑ์ ์ ๊ทผํ ์ ์์.
- template ์์ฑ์ ๋งํฌ์ ์์ฑ์ render function์ผ๋ก ๋ณํ.
- ์ธ์คํด์ค๊ฐ ๋์ ๋ถ์ฐฉ๋๊ธฐ ์ .
- el ์์ฑ์ ์ง์ ํ ๋์ ์ธ์คํด์ค๋ฅผ ๋ถ์ฐฉํ์๋ง์ ํธ์ถ๋๋ ๋จ๊ณ.
- ๋์ ์ ์ดํ ์ ์์ผ๋ ๋ถ์ฐฉํ์๋ง์ ํธ์ถ๋๋ฏ๋ก ํ์ ์ปดํฌ๋ํธ๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ํด ์ถ๊ฐ๋ ํ๋ฉด์์๊ฐ ์ต์ข HTML ์ฝ๋๋ก ๋ณํ๋๋ ์์ ๊ณผ ๋ค๋ฅผ ์ ์์.
- ์ธ์คํด์ค์ ์์ฑ๋ค์ด ํ๋ฉด์ ์นํ๋๊ณ ๋๋ฉด '๋ฐ์ดํฐ ๊ด์ฐฐ'์ ํตํด ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋์ง๋ฅผ ๊ฐ์ํ๋๋ฐ,
- ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๊ณ ํ๋ฉด์ ๋ค์ ๊ทธ๋ฆฌ๊ธฐ ์ง์ ์ ํธ์ถ๋๋ ๋จ๊ณ.
- ๋ณ๊ฒฝ ์์ ์ธ ์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์์ผ๋ฏ๋ก ๋ฐ์ดํฐ ๊ฐ์ ๊ฐฑ์ ํ๊ธฐ ์ํด์๋ ์ด ๋จ๊ณ์ ๋ก์ง์ ์ถ๊ฐํ๋ค.
- ๊ฐ์ ๋์ผ๋ก ๋ค์ ํ๋ฉด ๊ทธ๋ฆฌ๊ณ ๋์ ์คํ๋๋ ๋จ๊ณ.
- ๋ฐ์ดํฐ ๋ณ๊ฒฝ ํ์ ๋๊ณผ ๊ด๋ จ๋ ๋ก์ง์ ์ถ๊ฐํ ์ ์๋ค.
- ์ด ๋จ๊ณ์์ ๊ฐ์ ๊ฐฑ์ ํ๋ฉด ๋ฌดํ๋ฃจํ์ ๋น ์ง ์ ์์.
- ์ธ์คํด์ค ํ๊ดด ์ง์ ์ ํธ์ถ๋๋ ๋จ๊ณ.
- ์์ง ์ธ์คํด์ค์ ์ ๊ทผํ ์ ์์.
- ์ธ์คํด์ค ํ๊ดด ํ ํธ์ถ๋๋ ๋จ๊ณ.
- ์ธ์คํด์ค์ ๋ชจ๋ ์์ฑ, ํ์์ ์ ์ธํ ์ธ์คํด์ค๋ค๊น์ง ๋ชจ๋ ํ๊ดด๋จ.
<!DOCTYPE html>
<html lang="kr">
<head>
<meta charset="UTF-8">
<title>Vue ๊ณต๋ถ ์ค</title>
</head>
<body>
<div id="app">
{{ message }}
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.10/vue.min.js" type="text/javascript"></script>
<script>
let vue = new Vue({
el: '#app',
data: {
message: 'Hello, World!',
},
beforeCreate: function() {
console.log("beforeCreate");
},
created: function() {
console.log("created");
},
beforeMount: function() {
console.log("beforeMount");
},
mounted: function() {
console.log("mounted");
//this.message = "์ฌ๋ฐ๋ค";
//console.log("๊ฐ ๋ณ๊ฒฝ");
},
beforeUpdate: function() {
console.log("beforeUpdate");
},
updated: function() {
console.log("update");
},
beforeDestroy: function() {
console.log("beforeDestroy");
},
destroyed: function() {
console.log("destroyed");
}
});
let sec = 0;
let delay = setInterval(function(){
console.log(++sec);
if(sec === 2) {
vue.$destroy();
clearInterval(delay);
}
}, 1000);
</script>
</body>
</html>
- ๋ผ์ดํ ์ฌ์ดํด ๋จ๊ณ๋ง๋ค console.log() ์ฐ์๊ณ , 2์ด ๋ค์ ๋ทฐ ์ธ์คํด์ค ์๋ฉธ์ํค๋ ค๊ณ
let sec = 0;
let delay = setInterval(function(){
console.log(++sec);
if(sec === 2) {
vue.$destroy();
clearInterval(delay);
}
}, 1000);
- ์์ ์ฝ๋๋ฅผ ๋ฃ์๋ค.
- ํ์ด๋จธ์ฒ๋ผ ์ด ๋จ์๋ก console.log() ์ฐ์ผ๋ ค๊ณ setTimeout() ๋ง๊ณ setInterval() ์ด์ฉํ๋ค.
- ๊ทธ๋ฅ ๊น๋ํ๊ฒ ์๋์ ๊ฐ์ด ๋ฃ์ด๋ ๋๋ค.
setTimeout(function () { vue.$destroy(); }, 2000);
- ๊ฐ ์ฌ์ดํด ์์๋๋ก ๊ฑฐ์น๊ณ ์๋ฉธ๋จ.
- ๋น ์ง ๋จ๊ณ๊ฐ ์๋ค.
- beforeUpdate๋ updated
- ์๋?
- ๋์ $watch ์์ฑ์ด ๋ฐ์ดํฐ ๊ด์ฐฐ ํ๋ค๊ฐ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ํธ์ถ๋๋ ๋จ๊ณ๋ค์ด๋ผ์.
- ์ ์ฝ๋์์๋ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ง ์๊ธฐ ๋๋ฌธ์ ํธ์ถ๋์ง ์๋๋ค.
- ๋ ๋จ๊ณ๋ฅผ ํธ์ถํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝ์ํค์.
- mounted ๋จ๊ณ
- ์๋ ์ฝ๋์ ์ฃผ์์ ํด์ ํ๊ณ ๋ค์ ๋๋ ค๋ณด์.
this.message = "์ฌ๋ฐ๋ค";
console.log("๊ฐ ๋ณ๊ฒฝ");
- ๊ฐ์ด ๋ณ๊ฒฝ๋๊ณ beforeUpdate๋ updated ๋จ๊ณ๊ฐ ํธ์ถ๋จ.