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 |
๋๊ธ