[Vue.js] ๊ธฐ์ดˆ ๊ฐœ๋… ์ •๋ฆฌ - Vue LifeCycle Hook

2022. 3. 8. 00:28ใ†Front-End ์ž‘์—…์‹ค/Vue.js

728x90
๋ฐ˜์‘ํ˜•

 

 

 

๐Ÿ—‚ ๋ชฉ์ฐจ

[Vue.js] ๊ธฐ์ดˆ ๊ฐœ๋… ์ •๋ฆฌ - ๊ธฐ๋ณธ ํ™˜๊ฒฝ ๊ตฌ์„ฑ

[Vue.js] ๊ธฐ์ดˆ ๊ฐœ๋… ์ •๋ฆฌ - Vue Router

[Vue.js] ๊ธฐ์ดˆ ๊ฐœ๋… ์ •๋ฆฌ - Vue LifeCycle Hook

[Vue.js] ๊ธฐ์ดˆ ๊ฐœ๋… ์ •๋ฆฌ - data(), Data ์ฒ˜๋ฆฌ

[Vue.js] ๊ธฐ์ดˆ ๊ฐœ๋… ์ •๋ฆฌ - Watch, Array, for๋ฌธ(๋ฐ˜๋ณต๋ฌธ), if๋ฌธ

 

 

 

๐Ÿฑ Git Hub ์ฃผ์†Œ : https://github.com/junyharang-FrontEnd-coding-study/vue.js-study

๐Ÿ“– ์ฐธ๊ณ  ์ž๋ฃŒ : https://www.youtube.com/watch?v=sqH0u8wN4Rs

 

๐Ÿ“– ์ฐธ๊ณ  ์ž๋ฃŒ : https://wormwlrm.github.io/2018/12/29/Understanding-Vue-Lifecycle-hooks.html

 

 

๐Ÿš€ VueLife Cycle Hook ์ด๋ž€?

 

Vue ์ธ์Šคํ„ด์Šค๋‚˜, ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ, ์‚ฌ์ „์— ์ •์˜๋œ ๋ช‡ ๋‹จ๊ณ„์˜ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋ฅผ ์ƒ๋ช…์ฃผ๊ธฐ(Life Cycle)์ด๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์ด์—์š”.
Vue ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋œ ๋’ค ์šฐ๋ฆฌ ๋ˆˆ์— ๋ณด์—ฌ์ง€๊ณ , ์‚ฌ๋ผ์ง€๊ธฐ ๊นŒ์ง€์˜ ๋‹จ๊ณ„๋ฅผ ๋งํ•œ๋‹ต๋‹ˆ๋‹ค!

Vue ์ธ์Šคํ„ด์Šค๋Š” ํฌ๊ฒŒ ์ƒ์„ฑ(Create)๋˜๊ณ , DOM์— ๋ถ™๊ฒŒ(Mount)๋˜๊ณ , ์ˆ˜์ •(Update)๋œ ๋’ค ์—†์–ด์ง€๋Š”(Destroy) ํฌ๊ฒŒ 4๊ฐ€์ง€ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์—์š”.

์ด ๊ณผ์ •์—์„œ Vue๋Š” ๊ฐ๊ฐ์˜ ๋‹จ๊ณ„์—์„œ Vue๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด Hook์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก API๋ฅผ ์ œ๊ณตํ•œ๋‹ต๋‹ˆ๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์ข…๋ฅ˜๋กœ๋Š” beforeCreate, created, beforeMount, mounted, beforeUpdate, updated, beforeDestory, destroyes๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

์ถœ์ฒ˜ : https://kr.vuejs.org/v2/guide/instance.html

 

์œ„์˜ ๊ทธ๋ฆผ์„ ์ข€ ๋” ์‰ฌ์šด ๊ทธ๋ฆผ์œผ๋กœ ๋ณผ ๊ฒƒ์ด์—์š”.

 

์ถœ์ฒ˜ : https://velog.io/@uoayop/Vue.js-%EB%9D%BC%EC%9D%B4%ED%94%84-%EC%82%AC%EC%9D%B4%ED%81%B4

 

 

beforCreate

Type : Function

๊ฐ„๋žต : ์ธ์Šคํ„ด์Šค๊ฐ€ ์ดˆ๊ธฐํ™” ๋œ ๋’ค Data ๊ด€์ฐฐ ๋ฐ Event/Watcher(๊ฐ์‹œ์ž) ์„ค์ • ์ „์— ๋™๊ธฐ์ ์œผ๋กœ ํ˜ธ์ถœ

์ƒ์„ธ : Vue ์ธ์Šคํ„ด์Šค๊ฐ€ ์ดˆ๊ธฐํ™” ๋œ ๋’ค ๋ฐœ์ƒ๋˜๋Š”๋ฐ, ์ปดํฌ๋„ŒํŠธ๊ฐ€ DOM์— ์ถ”๊ฐ€๋˜๊ธฐ ์ „์ด๊ธฐ ๋•Œ๋ฌธ์— `this.$el`์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.
๋˜ํ•œ, data, event, watcher์—๋„ ์ ‘๊ทผํ•˜๊ธฐ ์ „์ด๊ธฐ ๋•Œ๋ฌธ์— data, methods ์—๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.

 

์˜ˆ์‹œ ์ฝ”๋“œ

var app = new Vue({
	el: '#app',
    data() {
    	return {
        	msg: 'hello JunyHarang';
        }
    },
    
    beforeCreate(function() {
    	console.log(this.msg);		// undefined Error
    })
})

 

 

created

Type : Function

๊ฐ„๋žต : ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋œ ๋’ค ๋™๊ธฐ์  ํ˜ธ์ถœ. ์ด ๋‹จ๊ณ„์—์„œ ์ธ์Šคํ„ด์Šค๋Š” data ๊ด€์ฐฐ, computed ์†์„ฑ, methods, watch/ Event Call Back ๋“ฑ์˜ ์„ค์ •์ด ์ค€๋น„ ๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•˜๋Š” Option ์ฒ˜๋ฆฌ ์™„๋ฃŒ.
๋‹จ, Mount ๋‹จ๊ณ„๊ฐ€ ์‹œ์ž‘๋˜์ง€ ์•Š์€ ๋‹จ๊ณ„์ด๋ฉฐ, `$el`์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

์ƒ์„ธ : data๋ฅผ ๋ฐ˜์‘ํ˜•์œผ๋กœ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฉฐ computed, methods, watch ๋“ฑ์ด ํ™œ์„ฑํ™” ๋˜์–ด ์ ‘๊ทผ์ด ๊ฐ€๋Šฅ.
ํ•˜์ง€๋งŒ, ์•„์ง๊นŒ์ง€ DOM์—๋Š” ์ถ”๊ฐ€๋˜์ง€ ์•Š์€ ์ƒํƒœ.

data์— ์ง์ ‘ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, Component ์ดˆ๊ธฐ์— ์™ธ๋ถ€์—์„œ ๋ฐ›์•„์˜จ ๊ฐ’๋“ค๋กœ data๋ฅผ Setting ํ•˜๊ฑฐ๋‚˜, Event ๋ฆฌ์Šค๋„ˆ๋ฅผ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์ด ๋‹จ๊ณ„์—์„œ ํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆ. 
Option์˜ ์„ค์ •๋“ค์„ ์™„๋ฃŒํ•˜๋Š” ์‹œ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

 

์˜ˆ์‹œ ์ฝ”๋“œ

var app = new Vue({
    el: '#app',
    data() {
        return {
            msg: 'hello JunyHarang';
        }
    },
    created(function() {
        console.log(this.msg); 			// hello JunyHarang
    })
})

 

 

beforeMount

Type : Function

๊ฐ„๋žต : ๋งˆ์šดํŠธ๊ฐ€ ์‹œ์ž‘๋˜๊ธฐ ์ง์ „ ํ˜ธ์ถœ. render ํ•จ์ˆ˜๊ฐ€ ์ฒ˜์Œ ํ˜ธ์ถœ.
์ด Hook์€ ์„œ๋ฒ„์ธก ๋žœ๋”๋ง ์ค‘ ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค.

์ƒ์„ธ : DOM(html Code)์— ๋ถ™๊ธฐ ์ง์ „ ํ˜ธ์ถœ ๋˜๋Š” Hook์œผ๋กœ ์ด ๋‹จ๊ณ„ ์ „์—๋Š” ํ…œํ”Œ๋ฆฟ์ด ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ํ™•์ธ ๋’ค ํ…œํ”Œ๋ฆฟ์„ ๋žœ๋”๋ง ํ•œ ์ƒํƒœ์ด๊ธฐ์— ๊ฐ€์ƒ DOM์ด ์ƒ์„ฑ ๋˜์–ด์žˆ์œผ๋‚˜, ์‹ค์ œ DOM์—๋Š” ๋ถ™์ง€ ์•Š์€ ์ƒํƒœ

 

์˜ˆ์‹œ ์ฝ”๋“œ

var app = new Vue({
    el: '#app',
    beforeMount(function() {
        console.log('beforeMount');
    })
})

 

 

 

mounted

Type : Function

๊ฐ„๋žต : ์ธ์Šคํ„ด์Šค๊ฐ€ ๋งˆ์šดํŠธ๋œ ๋’ค ํ˜ธ์ถœ๋˜๋ฉฐ `Vue.createApp({}).mount()`๋กœ ์ „๋‹ฌ๋œ Element๋Š” ์ƒˆ๋กœ ์ƒ์„ฑ๋œ `vm.$el`๋กœ ๋Œ€์ฒด๋œ๋‹ค. Root ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฌธ์„œ ๋‚ด Element์— Mount ๋˜์–ด ์žˆ์œผ๋ฉด `mounted`๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ `vm.$el`๋„ ๋ฌธ์„œ์— ํฌํ•จ(in-document)๋œ๋‹ค.

์ƒ์„ธ : ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” Hook์œผ๋กœ ๊ฐ€์ƒ DOM์˜ ๋‚ด์šฉ์ด ์‹ค์ œ DOM์— ๋ถ™๊ณ  ๋‚œ ๋’ค ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— `this.$el`์„ ๋น„๋กฏํ•œ data, computed, methods, watch ๋“ฑ ๋ชจ๋“  ์š”์†Œ์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅ.

 

 

์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ ๋ถ€๋ชจ์™€ ์ž์‹ ์ปดํฌ๋„ŒํŠธ ๊ฐ„ mounted Hook ์ˆœ์„œ๋Š” ์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™๋‹ค.
๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์˜ mounted Hook์€ ํ•ญ์ƒ ์ž์‹ Component์˜ mounted Hook ์ดํ›„ ๋ฐœ์ƒํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์„œ๋ฒ„์—์„œ ๋น„๋™๊ธฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๋Š” ๊ฒฝ์šฐ์ฒ˜๋Ÿผ, ๋ถ€๋ชจ์˜ mounted Hook์ด ๋ชจ๋“  ์ž์‹ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ ๋œ ์ƒํƒœ๋ฅผ ๋ณด์žฅํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๋•Œ๋Š” `this.$nextTick`์„ ์ด์šฉํ•ด ๋ชจ๋“  ํ™”๋ฉด์ด ๋žœ๋”๋ง ๋œ ๋’ค ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์— mount ์ƒํƒœ๋ฅผ ๋ณด์žฅ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

 

์˜ˆ์‹œ ์ฝ”๋“œ

var app = new Vue({
    el: '#app',
    mounted(function() {
        console.log('mounted');
    })
})

 

 

 

beforeUpdate

Type : Function

๊ฐ„๋žต : DOM์ด ํŒจ์น˜๋˜๊ธฐ ์ „ Data๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ํ˜ธ์ถœ. ์ด ํ›…์€ update ์ „์— ๊ธฐ์กด DOM์— ์ ‘๊ทผ (์˜ˆ : ์ˆ˜๋™์œผ๋กœ ์ถ”๊ฐ€๋œ Event ๋ฆฌ์Šคํ„ฐ๋ฅผ ์ œ๊ฑฐ).

์ƒ์„ธ : ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” data์˜ ๊ฐ’์ด ๋ณ€ํ•ด DOM์—๋„ ๊ทธ ๋ณ€ํ™”๋ฅผ ์ ์šฉ์‹œ์ผœ์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. beforeUpdate Hook์€ ๋ณ€ํ™” ์ง์ „์— ํ˜ธ์ถœ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ณ€ํ•  ๊ฐ’์„ ์ด์šฉํ•ด ๊ฐ€์ƒ DOM์„ ๋žœ๋”๋งํ•˜๊ธฐ ์ „์ด๋‚˜, ์ด ๊ฐ’์„ ์ด์šฉํ•ด ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด Hook์—์„œ ๊ฐ’๋“ค์„ ์ถ”๊ฐ€์ ์œผ๋กœ ๋ณ€ํ™” ์‹œํ‚ค๋”๋ผ๋„ ๋žœ๋”๋ง์„ ์ถ”๊ฐ€๋กœ ํ˜ธ์ถœํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค.

 

์˜ˆ์‹œ ์ฝ”๋“œ

var app = new Vue({
    el: '#app',
    beforeUpdate(function() {
        console.log('beforeUpdate');
    })
})
๋ฐ˜์‘ํ˜•

 

 

 

updated

Type : Function

๊ฐ„๋žต : Data๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด ๊ฐ€์ƒ DOM์ด ๋‹ค์‹œ ๋žœ๋”๋ง๋˜๊ณ , ํŒจ์น˜๋œ ๋’ค ํ˜ธ์ถœ๋œ๋‹ค.
updated๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ์ปดํฌ๋„ŒํŠธ์˜ DOM์ด update ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์—์„œ DOM์˜ ์ข…์†์ ์ธ ์—ฐ์‚ฐ(DOM-dependent operations)์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ๋Œ€๋ถ€๋ถ„ Hook ๋‚ด๋ถ€์—์„œ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค. ์ƒํƒœ ๋ณ€๊ฒฝ์— ๋ฐ˜์‘ํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ฐ˜์ ์œผ๋กœ computed property ์†์„ฑ์ด๋‚˜, watcher๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
updated๋Š” ๋ชจ๋“  ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ค์‹œ ๋žœ๋”๋ง ๋˜์—ˆ์Œ์œผ๋กœ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ „์ฒด ํ™”๋ฉด์ด ์žฌ ๋žœ๋”๋ง ๋  ๋•Œ๊ฐ€์ง€ ๊ธฐ๋‹ค๋ฆฌ๋ ค๋ฉด, updated ๋‚ด๋ถ€ `vm.$nextTick`์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ด Hook์€ ์„œ๋ฒ„ ์ธก ๋ Œ๋”๋ง ์ค‘ ํ˜ธ์ถœ ๋˜์ง€ ์•Š๋Š”๋‹ค.


์ƒ์„ธ : ๊ฐ€์ƒ DOM์„ ๋ Œ๋”๋ง ํ•˜๊ณ  ์‹ค์ œ DOM์ด ๋ณ€๊ฒฝ๋œ ๋’ค ํ˜ธ์ถœ ๋˜๋Š” Hook์ด๋‹ค. ๋ณ€๊ฒฝ๋œ data๊ฐ€ DOM์—๋„ ์ ์šฉ๋œ ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ๋œ ๊ฐ’๋“ค์„ DOM์„ ์ด์šฉํ•ด ์ ‘๊ทผํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, updated Hook์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
๋‹ค๋งŒ, ์ด Hook์—์„œ data๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ๋ฌดํ•œ ๋ฃจํ”„์— ๋น ์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ง์ ‘ data๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ ๋งค์šฐ ์œ„ํ—˜ํ•˜๋‹ค.
mounted Hook๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ `this.$nextTick`์„ ์ด์šฉ ๋ชจ๋“  ํ™”๋ฉด์ด update๋œ ๋’ค ์ƒํƒœ๋ฅผ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์˜ˆ์‹œ ์ฝ”๋“œ

var app = new Vue({
    el: '#app',
    updated(function() {
        console.log('updated');
    })
})

 

 

 

 

 

beforeDestroy

Type : Function

์ƒ์„ธ : ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•ด์ฒด๋˜๊ธฐ ์ง์ „ beforeDestroy Hook์ด ํ˜ธ์ถœ๋œ๋‹ค. ์•„์ง ํ•ด์ฒด๋˜๊ธฐ ์ด์ „์ด๊ธฐ ๋•Œ๋ฌธ์— ์ธ์Šคํ„ด์Šค๋Š” ์™„์ „ํ•˜๊ฒŒ ์ž‘๋™ ๋˜๊ณ  ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“  ์†์„ฑ์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ Event ๋ฆฌ์Šคํ„ฐ๋ฅผ ํ•ด์ฒดํ•˜๋Š” ๋“ฑ ์ธ์Šคํ„ด์Šค๊ฐ€ ์‚ฌ๋ผ์ง€๊ธฐ ์ „์— ํ•ด์•ผํ•  ์ผ๋“ค์„ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋œ๋‹ค.

 

์˜ˆ์‹œ ์ฝ”๋“œ

var app = new Vue({
    el: '#app',
    beforeDestroy(function() {
        console.log('beforeDestroy');
    })
})

 

 

 

 

destroyed

Type : Function

์ƒ์„ธ : ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•ด์ฒด๋˜๊ณ  ๋‚œ ๋’ค destroyed Hook์ด ํ˜ธ์ถœ๋œ๋‹ค. ํ•ด์ฒด๊ฐ€ ๋๋‚œ ๋’ค์ด๊ธฐ ๋•Œ๋ฌธ์— ์ธ์Šคํ„ด์Šค์˜ ์†์„ฑ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค. ๋˜ํ•œ, ํ•˜์œ„ Vue ์ธ์Šคํ„ด์Šค ์—ญ์‹œ ์‚ญ์ œ๋œ๋‹ค.

 

์˜ˆ์‹œ ์ฝ”๋“œ

var app = new Vue({
    el: '#app',
    destroyed(function() {
        console.log('destroyed');
    })
})

 

 

ํ™”๋ฉด์— ์–ด๋–ป๊ฒŒ ์ฐํžˆ๋Š”์ง€ ๋ณด๊ธฐ ์œ„ํ•ด ์œ„์™€ ๊ฐ™์ด Life Cycle Hook์— ๋ชจ๋“  ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ , console.log๋ฅผ ํ†ตํ•ด ์ถœ๋ ฅ ๋˜๋„๋ก ํ•ด ๋ณผ ๊ฒƒ์ด์—์š”.

 

 

ํ™”๋ฉด์— ์ฒ˜์Œ ๋“ค์–ด์˜ค๊ฒŒ ๋˜๋ฉด console์— `beforeCreate, created, beforeMount, mounted`๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ฐํžˆ๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

 

์ด ์ƒํƒœ์—์„œ Data๋ฅผ ๋ณ€๊ฒฝ์„ ์ฃผ๋Š” Set Button์„ ๋ˆ„๋ฅด๋Š” ์ˆœ๊ฐ„ `beforeUpdate, updated`๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”. ์œ„์˜ ๊ทธ๋ฆผ์—์„œ ๋ณด์•˜๋“ฏ์ด Data๊ฐ€ ๋ณ€๊ฒฝ์ด ๋˜๋ฉด beforeUpdate์™€ updated๊ฐ€ ํ˜ธ์ถœ ๋˜๋ฉด์„œ ๊ฐ€์ƒ DOM์ด Re Render๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด์—์š”. ์ฆ‰, ํ™”๋ฉด์—์„œ ์–ด๋–ค Data๊ฐ€ ๋ณ€๊ฒฝ์ด ๋˜๋ฉด ์ด ๋‘ ๊ฐœ๊ฐ€ ํ˜ธ์ถœ ๋˜๋Š” ๊ฒƒ์ด์—์š”.

Data ๋ณ€๊ฒฝ Button์— ๊ด€๋ จํ•ด์„œ๋Š” `์ด ๊ณณ`์„ ์ฐธ๊ณ  ํ•ด ์ฃผ์„ธ์š”!

์šฐ๋ฆฌ๊ฐ€ DB์—์„œ ์–ด๋–ค ๊ฐ’์„ ๊ฐ€์ ธ์™€์„œ ํ™”๋ฉด์„ ๋ณด์—ฌ์ค˜์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •์„ ํ–ˆ์„ ๋•Œ๋Š” created ๋‹จ์—์„œ ํ•ด๋‹น Data๋ฅผ ๊ฐ€์ ธ์˜ค๊ฒŒ ํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์ด์—์š”. ๊ทธ๋Ÿฐ ๋’ค data()์—์„œ ํ•ด๋‹น ๋‚ด์šฉ์„ ๊ฐ€์ ธ์™€์„œ mounted ๋‹จ๊ณ„์—์„œ ํ™”๋ฉด์— ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

์ด๋ฏธ Data๋ฅผ ๊ฐ€์ ธ์˜จ ๋’ค Data๊ฐ€ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๊ฒŒ ๋œ๋‹ค๋ฉด beforeUpdate์™€ updated ๋‹จ๊ณ„์—์„œ ์–ด๋–ค ์ž‘์—…์„ ํ•ด์ฃผ๋ฉด ๋˜๋Š” ๊ฒƒ์ด์—์š”. beforeUpdate์™€ updated๋Š” Re Render๋ฅผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ™”๋ฉด์— ์ถœ๋ ฅ ๋˜๊ธฐ ์ „ Data๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•œ๋‹ค๋ฉด created ๋‹จ๊ณ„์—์„œ Data๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ€์ ธ์˜ค๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋งž๋‹ต๋‹ˆ๋‹ค!

 

 

 

 

 

๐Ÿš€ InstanceLife Cycle Hook ์ด๋ž€?

์ธ์Šคํ„ด์Šค ๋ผ์ดํ”„ ์‚ฌ์ดํด์ด๋ž€ Vue.js์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์†Œ๋ฉธ๋˜๊ธฐ๊นŒ์ง€ ๊ณผ์ •์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๋‚˜๋ฉด Library ๋‚ด๋ถ€์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์ด ์ง„ํ–‰๋œ๋‹ต๋‹ˆ๋‹ค.

โ— DATA ์†์„ฑ์˜ ์ดˆ๊ธฐ์™€ ๋ฐ ๊ด€์ฐฐ (Reactivity ์ฃผ์ž…)
โ— Vue Template Code Compile (Virtual DOM -> DOM ๋ณ€ํ™˜)
โ— ์ธ์Šคํ„ด์Šค๋ฅผ DOM์— ๋ถ€์ฐฉ

    ๐Ÿ”ฝ  Life Cycle Diagram

์ธ์Šคํ„ด์Šค ๋ผ์ดํ”„ ์‚ฌ์ดํด ํ๋ฆ„์„ ๊ทธ๋ฆผ์œผ๋กœ ๊ทธ๋ ค๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์•„์š”.

Life Cycle Diagram

 

 

 

    ๐Ÿ”ฝ  Life Cycle Hook

Vue.js Life Cycle์„ ์ด์• ํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ๋ฐ”๋กœ Life Cycle Hook ๋•Œ๋ฌธ์ด์—์š”. Life Cycle Hook์œผ๋กœ ์ธ์Šคํ„ด์Šค์˜ ํŠน์ • ์‹œ์ ์— ์›ํ•˜๋Š” Logic์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .

์˜ˆ๋ฅผ ๋“ค์–ด Component๊ฐ€ ์ƒ์„ฑ๋˜์ž๋งˆ์ž Data๋ฅผ Server์—์„œ ๋ฐ›์•„์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด `create()`, `beforeMount` Life Cycle Hook์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”. ์•„๋ž˜ Code๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜์ž๋งˆ๋‹ค `Axios`๋ฅผ ํ†ตํ•ด `HTTP Get Method`๋ฅผ ํ†ตํ•ด ์š”์ฒญ์„ ๋ณด๋‚ด Data๋ฅผ ๋ฐ›์•„์˜ค๋Š” Code์—์š”.

new Vue({
  methods: {
    fetchData() {
      axios.get(url);
    }
  },
  created: function() {
    this.fetchData();
  }
})

 

 

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•