# state vs data
Vue.js ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด ์ปดํฌ๋ํธ์ data ์์ฑ๊ณผ ๋ทฐ์์ค(Vuex)์ state ์์ฑ ์ค ์ด๋ค ๊ฑธ ์ฌ์ฉํด์ผ ํ๋์ง ๊ณ ๋ฏผํ๊ธฐ ์์ํฉ๋๋ค. ๊ฐ ์์ฑ์ ์ ์์ ์ด๋ค ์ํฉ์์ ๋ทฐ์์ค์ state๋ฅผ ์ฐ๋ฉด ์ข์์ง ์์๋ณด๊ฒ ์ต๋๋ค.
# data ์์ฑ
data
์์ฑ์ ๋ทฐ์ ๋ฐ์์ฑ(Reactivity)์ด ์ฃผ์
๋ ์์ฑ์
๋๋ค. ์ฃผ๋ก ๋ฐ์ดํฐ์ ๊ฐ์ ํ๋ฉด์ ํ์ํ๊ธฐ ์ํด์ ์ฌ์ฉํ๋ ์์ฑ์
๋๋ค.
<template>
<div>{{ message }}</div> <!-- Hello Vue.js -->
</template>
new Vue({
data: {
message: 'Hello Vue.js'
}
})
๋ฐ์์ฑ์ด ์ฃผ์ ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ๊ฐ์ด ๋ณํ๋ฉด ํ๋ฉด์ด ๋ค์ ๊ทธ๋ ค์ง๋๋ค.
<template>
<div>{{ message }}</div> <!-- changeMessage() ๊ฐ ์คํ๋๋ฉด hi ํ์ -->
</template>
new Vue({
data: {
message: 'Hello Vue.js'
},
methods: {
changeMessage() {
this.message = 'hi';
}
}
})
# state ์์ฑ
state
์์ฑ๋ ๋ทฐ์ ๋ฐ์์ฑ์ด ์ฃผ์
๋์ด ์๋ ์์ฑ์
๋๋ค. ์๋์ ๊ฐ์ด ์คํ ์ด์ ์ ์ํ๊ณ ๋ชจ๋ ์ปดํฌ๋ํธ์์ ์ ๊ทผํ ์ ์์ต๋๋ค.
<div>{{ $store.state.message }}</div>
new Vuex.Store({
state: {
message: 'Hello Vue.js'
}
})
# ์ ๊ทผ ๊ฐ๋ฅ ๋ฒ์
data
์์ฑ์ ํด๋น ์์ฑ์ ์ ์ธํ ํน์ ์ปดํฌ๋ํธ์์๋ง ์ ๊ทผ ๊ฐ๋ฅํฉ๋๋ค. ๋ง์ฝ ๋ค๋ฅธ ์ปดํฌ๋ํธ์์ ํด๋น data
์์ฑ์ ์ ๊ทผํ๋ ค๋ฉด ํ๋กญ์ค ์์ฑ์ ์ด์ฉํ์ฌ ์ ๊ทผํด์ผ ํฉ๋๋ค. ๋ฐ๋ฉด์, state
์์ฑ์ ์คํ ์ด์ ํ๋ฒ ์ ์ํ๋ฉด ๋ชจ๋ ์ปดํฌ๋ํธ์์ ์ ๊ทผํ ์ ์์ต๋๋ค.
# ๊ฐ ๋ณ๊ฒฝ ๋ฐฉ์
data
์์ฑ์ ํด๋น ์ปดํฌ๋ํธ ๋ด์์ ์์ ๋กญ๊ฒ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๋ฉ์๋๋ ๋ผ์ดํ์ฌ์ดํด ํ
ํจ์ ๋ฑ ์๋์ ๊ฐ์ด ์ปดํฌ๋ํธ ๋ด์์ this
๋ก ์ ๊ทผํ์ฌ ๊ฐ์ ๋ณ๊ฒฝํฉ๋๋ค.
<template>
<div>{{ count }}</div>
<button @click="increment">+</button>
</template>
new Vue({
data: {
count: 0
},
methods: {
increment() {
this.count += 1;
}
}
})
state
์์ฑ์ ๋ฎคํ
์ด์
์ผ๋ก๋ง ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๋ฎคํ
์ด์
์ ํตํด ๋ณ๊ฒฝ๋ ๊ฐ์ ํด๋น state
์์ฑ์ ์ฌ์ฉํ๊ณ ์๋ ๋ชจ๋ ์ปดํฌ๋ํธ์ ๋ฐ์๋์ด ์ต์ ์ํ๋ฅผ ์ ์งํฉ๋๋ค.
<template>
<div>{{ $store.state.count }}</div>
<button @click="increase">+</button>
</template>
// count.vue
new Vue({
methods: {
increase() {
this.$store.commit('increment');
}
}
})
// store.js
new Vuex.Store({
state: {
count: 0
},
mutations: {
increment(state) {
state.count += 1;
}
}
})
# Vuex๋ฅผ ์ธ์ ์ฌ์ฉํ ๊น?
๋ทฐ์์ค๋ ๊ผญ ๋ทฐ์์ค๋ฅผ ์จ์ผ๋ง ํน์ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์์ ๋ ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค. ๋ฌผ๋ก ์ฌ๋ฌ ์ปดํฌ๋ํธ ๊ฐ์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ๋๋ state
์์ฑ์ ์ฐ๋ ๊ฒ์ด ํ๋กญ์ค ์์ฑ๊ณผ ์ด๋ฒคํธ ์๋ฐ ๋ฐฉ์์ผ๋ก ์ ๋ฌํ๋ ๊ฒ๋ณด๋ค ๋ ํธํด ๋ณด์
๋๋ค. ํ์ง๋ง, ์ด๋ ๊ฒ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ํ๋์ ๊ณต๊ฐ(์คํ ์ด)์ ๋ฐ์ง๋๋ ๊ฒฝ์ฐ ์ดํ์ ํด๋น ๊ณต๊ฐ์ด ๋ ๋ณต์กํด์ง๋ ๋ฌธ์ ์ ์ด ์๊น๋๋ค. ๋ํ, ํน์ UI ์์ญ์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ ์ต๋ํ ๊ทธ UI ์์ญ์ ๊ฐ๊น์ด ์๊ฒ ํ๋ ๊ฒ์ด ์ถํ ๊ธฐ๋ฅ ํ์ฅ์ด๋ ์ค๋ฅ ๋ถ์์๋ ์ฉ์ดํฉ๋๋ค.
๋ทฐ์์ค๋ฅผ ์ธ์ ์จ์ผ ํ๋์ง์ ๋ํ ๋ต์ ์์ต๋๋ค. ์ค์ค๋ก ์ปดํฌ๋ํธ์ ๋ฒ์๋ฅผ ๊ตฌ๋ถ ์ง๊ณ ์ด๋ค ๋ฐ์ดํฐ(์ํ)๋ฅผ ์ด๋์ ์ ์ธํ ์ง ํ๋จํ ์ ์์ ๋ ๋ทฐ์์ค๋ฅผ ๋ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ ์ ์์ ๊ฑฐ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํ๋กญ์ค๋ก ์ฌ๋ฌ ๋ฒ ๋ด๋ฆฌ๊ณ ์ด๋ฒคํธ๋ก ์ฌ๋ฌ ๋ฒ ์ฌ๋ ค์ ๋ฐ์ดํฐ ์ํ๋ฅผ ๋ฐ๊พธ๋ ๊ฒ์ด ๋ทฐ์์ค๋ณด๋ค ๋ ํธํ๋ค๋ฉด ๊ทธ๋ ๊ฒ ํด๋ ๋ฉ๋๋ค. ์ด์ด ๋ํ ํ๋จ์ ์ฌ๋ฌ๋ถ๊ป ๋งก๊ธฐ๊ฒ ์ต๋๋ค ๐
โ Modules Introduction ๐ โ