Skip to content

Latest commit

ย 

History

History
136 lines (123 loc) ยท 4.6 KB

[20200823]_lifecycle.md

File metadata and controls

136 lines (123 loc) ยท 4.6 KB

Lifecycle

beforeCreate

  • Init Events & LifeCycle ์งํ›„ ๊ฐ€์žฅ ์ฒ˜์Œ์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๋‹จ๊ณ„.
  • ์ธ์Šคํ„ด์Šค๋Š” ์ƒ์„ฑ๋˜์—ˆ์œผ๋‚˜ ์•„์ง ์†์„ฑ์ด ์ •์˜๋˜์ง€ ์•Š์•˜๋‹ค.
  • ๋”์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.

created

  • data ์†์„ฑ๊ฐ’๊ณผ methods ์†์„ฑ๊ฐ’์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ์ฒซ๋ฒˆ์งธ ๋‹จ๊ณ„.
  • ์ธ์Šคํ„ด์Šค๊ฐ€ ๋”์— ๋ถ€์ฐฉ๋˜๊ธฐ ์ „.
  • template ์†์„ฑ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Œ.

beforeMount

  • template ์†์„ฑ์˜ ๋งˆํฌ์—… ์†์„ฑ์„ render function์œผ๋กœ ๋ณ€ํ™˜.
  • ์ธ์Šคํ„ด์Šค๊ฐ€ ๋”์— ๋ถ€์ฐฉ๋˜๊ธฐ ์ „.

mounted

  • el ์†์„ฑ์— ์ง€์ •ํ•œ ๋”์— ์ธ์Šคํ„ด์Šค๋ฅผ ๋ถ€์ฐฉํ•˜์ž๋งˆ์ž ํ˜ธ์ถœ๋˜๋Š” ๋‹จ๊ณ„.
  • ๋”์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ ๋ถ€์ฐฉํ•˜์ž๋งˆ์ž ํ˜ธ์ถœ๋˜๋ฏ€๋กœ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋‚˜ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜ํ•ด ์ถ”๊ฐ€๋œ ํ™”๋ฉด์š”์†Œ๊ฐ€ ์ตœ์ข… HTML ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋˜๋Š” ์‹œ์ ๊ณผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ.

beforeUpdate

  • ์ธ์Šคํ„ด์Šค์˜ ์†์„ฑ๋“ค์ด ํ™”๋ฉด์— ์น˜ํ™˜๋˜๊ณ ๋‚˜๋ฉด '๋ฐ์ดํ„ฐ ๊ด€์ฐฐ'์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š”์ง€๋ฅผ ๊ฐ์‹œํ•˜๋Š”๋ฐ,
  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ณ  ํ™”๋ฉด์„ ๋‹ค์‹œ ๊ทธ๋ฆฌ๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋˜๋Š” ๋‹จ๊ณ„.
  • ๋ณ€๊ฒฝ ์˜ˆ์ •์ธ ์ƒˆ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ๊ฐฑ์‹ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด ๋‹จ๊ณ„์— ๋กœ์ง์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

updated

  • ๊ฐ€์ƒ ๋”์œผ๋กœ ๋‹ค์‹œ ํ™”๋ฉด ๊ทธ๋ฆฌ๊ณ ๋‚˜์„œ ์‹คํ–‰๋˜๋Š” ๋‹จ๊ณ„.
  • ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ํ›„์˜ ๋”๊ณผ ๊ด€๋ จ๋œ ๋กœ์ง์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ด ๋‹จ๊ณ„์—์„œ ๊ฐ’์„ ๊ฐฑ์‹ ํ•˜๋ฉด ๋ฌดํ•œ๋ฃจํ”„์— ๋น ์งˆ ์ˆ˜ ์žˆ์Œ.

beforeDestroy

  • ์ธ์Šคํ„ด์Šค ํŒŒ๊ดด ์ง์ „์— ํ˜ธ์ถœ๋˜๋Š” ๋‹จ๊ณ„.
  • ์•„์ง ์ธ์Šคํ„ด์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ.

destroyed

  • ์ธ์Šคํ„ด์Šค ํŒŒ๊ดด ํ›„ ํ˜ธ์ถœ๋˜๋Š” ๋‹จ๊ณ„.
  • ์ธ์Šคํ„ด์Šค์˜ ๋ชจ๋“  ์†์„ฑ, ํ•˜์œ„์— ์„ ์–ธํ•œ ์ธ์Šคํ„ด์Šค๋“ค๊นŒ์ง€ ๋ชจ๋‘ ํŒŒ๊ดด๋จ.

๐Ÿ‘‰ ์ฝ”๋“œ๋กœ ํ™•์ธ

<!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 ๋‹จ๊ณ„๊ฐ€ ํ˜ธ์ถœ๋จ.