๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ๋ฐœ/Vue.js

$nextTick()

by 1mj 2022. 4. 18.

Vue DOM ์กฐ์ž‘ ์‹œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ 

Vue.js์—์„œ data ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๊ณ  ๋‚œ ์งํ›„ UI๊ฐ€ ๊ฐฑ์‹ ๋  ๋•Œ Vue๊ฐ€ DOM์„ ์ฐพ์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ๋„ ํ•œ๋‹ค. DOM์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, created ํ›…์—์„œ DOM์„ ์กฐ์ž‘ํ•˜๋ ค๊ณ  ํ•  ๋•Œ๋Š” ์•„์ง DOM ์ƒ์„ฑ์ด ๋˜๊ธฐ ์ „์ด๋ฏ€๋กœ ํƒœ๊ทธ๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๊ฒŒ ๋œ๋‹ค.

 

created๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ์ž‘์„ฑ๋œ ํ›„ ๋™๊ธฐ์ ์œผ๋กœ ํ˜ธ์ถœ๋˜๋ฉฐ mounted๋ณด๋‹ค ๋จผ์ € ํ˜ธ์ถœ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์ƒ๋”์„ ์กฐ์ž‘ํ•  ์ˆ˜๋Š” ์—†๋‹ค. mounted๋Š” el์— ์ธ์Šคํ„ด์Šค๊ฐ€ ๋งˆ์šดํŠธ๋œ ์งํ›„ ํ˜ธ์ถœ๋˜์–ด ๊ฐ€์ƒ๋” ์กฐ์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

created: function() {
    var dom = document.getElementById('item1');
    dom.style.backgroundColor = 'blue';
}

 

item1์ด๋ผ๋Š” id๋ฅผ ๊ฐ€์ง„ ์š”์†Œ์˜ ๋ฐฐ๊ฒฝ์ƒ‰์„ ํŒŒ๋ž€์ƒ‰์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค. ์•„์ง ๋”์ด ์ƒ์„ฑ๋˜์ง€ ์•Š์•„ item1์ด๋ผ๋Š” id๋ฅผ ๊ฐ€์ง„ ์š”์†Œ๋ฅผ ์ฐพ์ง€ ๋ชปํ•ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

 

$nextTick()

Vue์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ๊ฐฑ์‹ , UI ๋ณ€๊ฒฝ ๋“ฑ DOM์˜ ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์™„์ „ํžˆ ๋ฐ˜์˜๋œ ํ›„ ๋กœ์ง์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก nextTick()์„ ์ œ๊ณตํ•œ๋‹ค. $nextTick ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ์•ˆ์—์„œ DOM์„ ์กฐ์ž‘ํ•˜๋ฉด Vue์—์„œ ๋ฐ์ดํ„ฐ ๊ฐฑ์‹  ํ›„ UI๊นŒ์ง€ ๋ชจ๋‘ ๊ทธ๋ฆฐ ํ›„์— ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํƒœ๊ทธ๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.

 

created: function() {
	this.$nextTick(function() {
    	var dom = document.getElementById('item1'); 
        dom.style.backgroundColor = 'blue';
    }); 
}

 

์œ„ ์ฝ”๋“œ๋ฅผ nextTick()์„ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด, ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ํ›„ DOM ์—…๋ฐ์ดํŠธ๋ฅผ ๋งˆ์น  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ์ฝœ๋ฐฑ์„ ํ˜ธ์ถœํ•˜๋ฏ€๋กœ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค.

 

$nextTick() + async/await

$nextTick()์€ Promise๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ async/await ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋” ๊น”๋”ํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฐธ๊ณ ๋กœ await ๋Š” async ์•ˆ์—์„œ๋งŒ ๋™์ž‘ํ•œ๋‹ค.

 

async created() {
	await this.$nextTick();
    // ํ•ด์•ผ ํ•  ์ž‘์—… ์ž‘์„ฑ
    ...
}

 

'๊ฐœ๋ฐœ > Vue.js' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Vue.js xlsx ์—‘์…€ ๋‹ค์šด๋กœ๋“œ  (0) 2022.06.16
vue router / query vs params  (0) 2022.06.14
Vue ์ƒ๋ช…์ฃผ๊ธฐ  (0) 2022.04.13
Vue3 Composition API  (0) 2022.04.06
Vuex / ์ƒํƒœ๊ด€๋ฆฌ / Vuex ํŒจํ„ด ๋ฐ ์š”์†Œ  (0) 2022.04.05

๋Œ“๊ธ€