# state vs data
์ ํ๋ฆฌ์ผ์ด์ ์คํ ์ดํธ(application state)๋ ํ๋ฉด์ ๋ณด์ฌ์ง๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํฉ๋๋ค. ๋ทฐ์์ ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์ดํธ๋ ํน์ ์ปดํฌ๋ํธ ๋ด์์๋ง ์ ๊ทผํ ์ ์๋ data์ ์ฌ๋ฌ ์ปดํฌ๋ํธ ๊ฐ์ ๊ณต์ ๋๋ state๋ก ๊ตฌ๋ถํ ์ ์์ต๋๋ค.
# ์ ๊ทผ ๊ฐ๋ฅ ๋ฒ์์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ๋ฐฉ์
data
์์ฑ์๋ ๊ฐ ์ปดํฌ๋ํธ์์ ํ์ํ ๋ณ์๋ฅผ ์ ์ํฉ๋๋ค. data
์์ฑ์ ์ ์ธ๋ ๊ฐ์ ํด๋น ์ปดํฌ๋ํธ ๋ด์์๋ง ์ ๊ทผํ๊ณ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ฐ ์ปดํฌ๋ํธ์์ ์๋ ์ฝ๋์ ๊ฐ์ด data
๋ฅผ ์ ์ํ๊ณ , ์ฌ์ฉํ ์ ์์ต๋๋ค.
<div>{{ message }}</div>
new Vue({
data: {
message: 'Hello Vue.js'
}
})
Vuex์ state
์๋ ์ฌ๋ฌ ์ปดํฌ๋ํธ์์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํ ๋ณ์๋ฅผ ์ ์ํฉ๋๋ค. state
์ ์ ์ธ๋ ๊ฐ์ ํ๋ก์ ํธ์ ๋ชจ๋ ์ปดํฌ๋ํธ์์ ์ ๊ทผํ๊ณ ์ฌ์ฉํ ์ ์์ต๋๋ค.
state
์ ์ ์ํ ๋ณ์๋ ๊ฐ ์ปดํฌ๋ํธ์์ ์๋ ์ฝ๋์ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
<div>{{ this.$store.state.message }}</div>
new Vuex.Store({
state: {
message: 'Hello Vue.js'
}
})
# ๊ฐ ๋ณ๊ฒฝ ๋ฐฉ์
data
์์ฑ์ ์ ์ธ๋ ๊ฐ์ ํด๋น ์ปดํฌ๋ํธ ๋ด์์ ์์ ๋กญ๊ฒ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. data
๋ ๋ทฐ์ ๋ฐ์์ฑ(Reactivity)์ด ๋ฐ์๋ ์์ฑ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด Vue๊ฐ ๋ฐ๋ก ๊ฐ์งํ์ฌ ํ๋ฉด์ ๋ณ๊ฒฝ๋ ๊ฐ์ ๋ณด์ฌ์ค๋๋ค.
<template>
<div>{{ count }}</div>
<button @click="increment">+</button>
</template>
new Vue({
data: {
count: 0
},
methods: {
increment() {
this.count += 1;
}
}
})
state
์ ์ ์ธ๋ ๊ฐ์ ๋ฎคํ
์ด์
์ ํตํด์๋ง ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
<template>
<div>{{ this.$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๋ฅผ ์ธ์ ์ฌ์ฉํ ๊น?
Vuex๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ์ปดํฌ๋ํธ๋ค์ ๊ฐ ์ปดํฌ๋ํธ๋ง์ ์ ํ๋ฆฌ์ผ์ด์
์คํ
์ดํธ ์ฆ, data
๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
์ด๋ ์ฌ๋ฌ ์ปดํฌ๋ํธ๊ฐ ํ ์ปดํฌ๋ํธ์ data
๋ฅผ ๊ณต์ ํด์ผ ํ๋ ๊ฒฝ์ฐ, prop
์์ฑ์ด๋ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ํ์ง๋ง ํ๋ก์ ํธ์ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก, ์ด๋ฐ ๋ฐฉ์์ ์ํ ๊ด๋ฆฌ๋ ์ฝ๋๋ฅผ ๋ณต์กํ๊ฒ ๋ง๋ญ๋๋ค.
๋ฐ๋ผ์ ์ฌ๋ฌ ์ปดํฌ๋ํธ๊ฐ ๊ณต์ ํ๋ ์คํ ์ดํธ๋ Vuex๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ญ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
Vuex์ store๋ฅผ ํตํด state
๋ฅผ ์ ์ญ์ผ๋ก ๊ด๋ฆฌํ๋ฉด, ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ๊ณต์ ํ๋ state
์ ์ง์ ์ ๊ทผํ ์ ์์ต๋๋ค. ๋ํ Vuex์ state
๋ Vue ์ธ์คํด์ค์ data
์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ทฐ์ ๋ฐ์์ฑ์ ๊ฐ๊ธฐ ๋๋ฌธ์ state
์ ๊ฐ์ด ๋ณ๊ฒฝ๋์์ ๋ ๋ฐ๋ก ๊ฐ์งํ ์ ์์ต๋๋ค.
โ Modules Vue Folder Structure โ