์ด๋ฒ ์ฑํฐ๋ Vuejs์ computed์ watch์ ๋ํด ๋ค๋ฃจ์์ต๋๋ค.
โ ๏ธ ์ ๋ฆฌํ ๋ด์ฉ์ ์คํ๋ ์๋ชป๋ ์ ๋ณด๊ฐ ์์ ์ ์์ต๋๋ค. ๋๊ธ๋ก ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
ํ
ํ๋ฆฟ ์์์ ๋ง์ ์ฐ์ฐ์ ํ๋ฉด ์ฝ๋๊ฐ ์ปค์ง๊ณ ์ ์ง๋ณด์๊ฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ์ข์ ๋ฐฉํฅ์ด ์๋๋ค. ์ด๋ด ๋ ์ฌ์ฉํ๋ ๊ฒ์ด computed
์ด๋ค. ๋ํ computed
์ ๊ฐ์ ์บ์ฑ๋๊ธฐ ๋๋ฌธ์, ๋ฆฌ๋ ๋๋ง ๋์ ๋, ๊ฐ์ ๊ฐ์ด ๋ค์ด์๋ค๋ฉด ์ฐ์ฐํ์ง ์๋๋ค.
<template>
<div>
<p>{{ increse }}</p>
</div>
</template>
<script>
export default {
data() {
return {
score: 1
};
},
computed: {
increse() {
return score + 1;
//data์ ์ง์ ์ ๊ทผํ์ฌ ๊ณ์ฐํ ๊ฒฐ๊ณผ๋ฅผ ํ
ํ๋ฆฟ์ ๋ณด์ผ ์ ์์ต๋๋ค.
}
}
};
</script>
์์ ๊ฐ์ด computed
์์ฑ์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ด ๊ฐ๋ฅํ๊ณ data
๊ฐ ๋ฐ๋์ ๋ฐ๋ผ computed
๊ฐ๋ ์๋์ผ๋ก ๋ฐ๋์ด ๋ ๋๋ง ๋๋ค.
<template>
<div id="demo">{{ fullName }}</div>
</template>
<script>
export default {
computed: {
fullName: {
// getter
get: function() {
return this.firstName + " " + this.lastName;
},
// setter
set: function(newValue) {
[this.firstName, this.lastName] = newValue.split(" ");
}
}
}
};
</script>
์์ฒ๋ผ fullName์ด ๋ณ๊ฒฝ๋๋ฉด set์ด ์คํ๋๊ณ firstName๊ณผ lastName์ด ๋์์ ๋ฐ๋๊ฒ ๋๋ค.
๋๋ถ๋ถ์ ๊ฒฝ์ฐ computed
์์ฑ์ด ๋ ์ ์ ํ์ง๋ง, watch
๊ฐ ํ์ํ ๊ฒฝ์ฐ๋ ์๋ค. ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ๋ํ ์๋ต์ผ๋ก ๋น๋๊ธฐ ํน์ ๋น์ฉ์ด ๋ง์ด ๋๋ ์์
์ ์ํํ๋ ค๋ ๊ฒฝ์ฐ์ ์ ์ฉํ๋ค. watch
๋ ๊ฐ์ ๊ฐ์ด์ด๋ ์ฐ์ฐ์ ๋ค์ํ๋ค๋ ํน์ง๋ ์๋ค.
fruits๋ฅผ ๊ฐ์ํ๋ฉด์ ์ ๊ฐ์ด ๋ฐ๋ ๋๋ง๋ค handler()
ํจ์๊ฐ ์คํ๋๋ ์์ ์ด๋ค.
<template>
<div id="app">
<button @click="capitalize">capitalize</button>
<ul>
<li v-for="fruit in fruits">{{ fruit.name }}</li>
</ul>
</div>
</template>
const App = {
data() {
return {
fruits: [
{ id: 1, name: 'Apple' },
{ id: 2, name: 'Banana' },
{ id: 3, name: 'Cherry' }
]
}
},
watch: {
fruits: {
handler() {
console.log(this.fruits)
},
deep: true, // ์ค์ฒฉ ๋ฐ์ดํฐ๋ ๊ฐ์
immediate: true // ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ์คํ ๋ฟ๋ง ์๋๋ผ ๋ฐ์ดํฐ๊ฐ ์ค๋น๊ฐ ๋์๋ง์ ์ฆ์ ์คํ
}
},
methods: {
capitalize() {
this.fruits.forEach(fruit => {
fruit.name = fruit.name.toUpperCase()
})
}
}
}
const vm = Vue.createApp(App).mount('#app')
computed์ watch์ ๋ํด์ ๋ฐฐ์ ๋๋ฐ ์ฐจ์ด์ ์ ๋ํด์๋ ์๊ฒ ๋์๊ณ ํ์คํ ์ค์ต๊ณผ ํจ๊ป ์งํํ๋ค ๋ณด๋ ์ดํด๊ฐ ๋ ๋นจ๋ฆฌ ๋๋ ๊ฒ ๊ฐ๋ค. ๊ทธ๋์ ๋ฐ๋๋ผJS๋ก state๋ฅผ ํ๋ํ๋ ๋ณ๊ฒฝํ๊ณ ๊ฐ์งํด์ผํ์ ๋์๋ ๋ฌ๋ฆฌ watch, computed ๋ฑ์ผ๋ก ๋ณ๊ฒฝ์ ์ฝ๊ฒ ๊ฐ์งํ ์ ์๋ค๋ ๊ฒ์ด ๋งค๋ ฅ์ ์ด์๋ค. ์ญ์ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๊ฐ ์๋ค.
vue ์ฌ๋ฏธ์๋ค. ๋๋์ด ์ด๋ฒ์ฃผ ๋ฐ๋ฆฐ ๊ฐ์ ์ฒญ์ฐ ์๋ฃ
ํ๋ก๊ทธ๋๋จธ์ค ๋ฐ๋ธ์ฝ์ค
Vue - compted ์์ฑ๊ณผ watch