์ด์ ํ๋ก์ ํธ์์ Vue.js์์ ์ปดํฌ๋ํธ ๊ฐ์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ๋ค๋ฃฐ ๋ event bus ๋ฑ์ผ๋ก๋ง ๊ด๋ฆฌํ์ ๋ ์ปดํฌ๋ํธ๋ผ๋ฆฌ์ ๊ด๊ณ์ฑ์ ํ์ ํ๊ธฐ ์ด๋ ค์ ๋ค. ์ฌ์ด์ฆ๊ฐ ํฐ ์ฑ์ ๋ค๋ฃฐ ๋๋ ๊ทธ๋์ Vuex๋ฅผ ๋ง์ด ์ฐ๋๋ฐ, ์ฒ์ Vuex๋ฅผ ์ ํ์ ๋ ๋ง์ด ํท๊ฐ๋ ธ์ด์, ํ ๋ฒ ์ ๋ฆฌ๋ฅผ ์ญ ํด๋ดค๋ค.
Vuex๋ ํต์ฌ์ธ state, mutations, actions๋ฅผ ์ดํดํ๋ ๊ฒ ์ค์ํ๋ฐ, state๋ vuex๋ผ๋ ๊ณตํต ์ค์ ์ ์ฅ์๊ฐ ๊ฐ์ง๋, ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ๊ณต์ ํ๋ data๋ค. ์ด state๋ผ๋ data๋ ๋ชจ๋ ์ปดํฌ๋ํธ ๊ฐ์ ๊ณต์ ๋๋ ์์ฑ์ด๊ธฐ ๋๋ฌธ์ this.$store.state.sampleState ์์ผ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
ํ์ง๋ง, ์ปดํฌ๋ํธ๋ผ๋ฆฌ ๋ชจ๋ ๊ณต์ ๊ฐ ๋๋ค๋ ์์ฑ ๋๋ฌธ์, ์ง์ ์ ์ผ๋ก ์ด๋ ๊ฒ ์ ๊ทผํด ์ํ๋ฅผ ๋ฐ๊พธ๋ ๊ฒ์ ๊ทธ๋ค์ง ์ข์ ๋ฐฉ๋ฒ์ด ์๋๋ค.
๊ทธ๋์, ๋๋๋ก vuex์์ ๊ฐ state์ ๋ณ๊ฒฝ์ ๋ค๋ฃจ๊ณ , ์ด๋ฅผ ์ํํ๋ ๋ก์ง์ ๊ฐ ์ปดํฌ๋ํธ์์ ๋ถ๋ฌ์ฐ๋ ๊ฒ์ด ๊น๋ํ๋ค.
// store -> index.js
const store = new Vuex.Store({
state: {
counter: 0
},
getters: {
counterTimes: state => {
return state.counter * 2
}
}
})
store๋ฅผ ๊ฐ๋, js ํ์ผ์, ์ฐ๋ฆฌ๋ state์ counter๋ผ๋ ๋ณ์๋ฅผ ํ ์คํธ๋ฅผ ์ํด ์ค์ ํด๋๊ณ , getters๋ผ๋ ์์ฑ์ ๋ ๋ฐ๋ก ๋ ์ ์์ด, ์ฌ๊ธฐ์ state ๊ฐ์ ๋ณ๊ฒฝํ๋ ๋ค์ํ ํจ์๋ฅผ ๋ฏธ๋ฆฌ ์ ์ธํด๋๊ณ , ๊ฐ๊ฐ์ ์ปดํฌ๋ํธ๋ค์ด ํ์ํ ๋๋ง๋ค state๋ฅผ ๋ถ๋ฌ ๋ก์ง์ ๋ฐ๋ก ์์ฑํ๋ ๋์ , counterTimes๋ฅผ ๋ถ๋ฅด๋ ์์ผ๋ก ๋์ฒํ ์ ์๋ค. ์ฝ๋์ ์ค๋ณต์ ๋ง๊ธฐ ์ํ Vuex์ ์ฅ์น๋ค.
๊ทธ๋ผ store์ ๋ฑ๋กํด๋ getters ์์ฑ์, ์ค์ ์ฌ์ฉ๋ ์ปดํฌ๋ํธ์์ ์๋์ ๊ฐ์ด computed ์์ฑ ๋ด๋ถ์ ํธ์ถํด์ค ์ ์๋ค.
// App.vue
// ..
<div>
display: {{ counterTimes }}
</div>
<script>
export default {
// ..
computed: {
counterTimes() {
return this.$state.getters.counterTimes
}
}
}
</script>
์ด๋ Vuex์ ...mapGetters ํฌํผ ํจ์๋ฅผ ํตํด ์ข ๋ ๊ฐ๋ ์ฑ์ ์ข๊ฒ ํ ์ฝ๋๋ฅผ ๋ง๋ค ์ ์๋ค.
// App.vue
// ..
<div>
display: {{ counterTimes }}
</div>
<script>
import { mapGetters } from 'vuex' // import ์์ผ์ค ํ,
export default {
// ..
computed: {
...mapGetters([
'counterTimes' // store์ getters์ ๋ฑ๋ก๋ ์์ฑ์ ์ด๋ฆ
])
}
}
</script>
...mapGetters๋, computed ์์ฑ์ ํด๋น ์ปดํฌ๋ํธ ๋ด์์ ์ฌ์ฉ๋ ๋ค๋ฅธ ์์ฑ๊ณผ ํจ๊ป ์ฐ๊ธฐ ์ํจ์ด๋ค. ES2015 ๋ฌธ๋ฒ.
๋ง์ผ, getters์ ์ด๋ฆ์ ๋ค๋ฅด๊ฒ ์ค์ ํ๊ณ ์ ํ๋ค๋ฉด, ์๋์ฒ๋ผ ์ธ ์ ์๋ค.
// App.vue
// ..
<div>
display: {{ counterTimesDiff }}
</div>
<script>
import { mapGetters } from 'vuex' // import ์์ผ์ค ํ,
export default {
// ..
computed: {
...mapGetters([
counterTimesDiff: 'counterTimes'
// 'counterTimes'๋ store์ getters์ ๋ฑ๋ก๋ ์์ฑ์ ์ด๋ฆ
])
}
}
</script>