Store์ ์๋ ์๋ 4๊ฐ์ง ์์ฑ๋ค์ ๊ฐํธํ๊ฒ ์ฝ๋ฉํ๋ ๋ฐฉ๋ฒ
ํฌํผ๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋ vue ํ์ผ์์ ์๋์ ๊ฐ์ด ํด๋น ํฌํผ๋ฅผ ๋ก๋ฉํ๋ค.
ํ์ํ ์์ฑ์ ํค๊ฐ์ ๋ฐฐ์ด๋ก ์
๋ ฅํ๊ณ , ๊ฐ์ฒด ์ ๊ฐ ์ฐ์ฐ์(ES6 ๋ฌธ๋ฒ)๋ก ์ ์ฉํ๋ค.
//App.vue
import { mapState, mapGetters, mapMutations, mapActions } from 'vuex'
export default {
computed() {
...mapState(['num'], ...mapGetters(['countedNum'])
},
methods: {
...mapMutations(['clickBtn']), ...mapActions(['asyncClickBtn'])
}
}
Vuex์ ์ ์ธํ state ์์ฑ์ ๋ทฐ ์ปดํฌ๋ํธ์ ๋ ์ฝ๊ฒ ์ฐ๊ฒฐํด์ฃผ๋ ํฌํผ
computed()์ ์ ์ธํ๋ค.
//App.vue
import { mapState } from 'vuex'
computed() {
...mapState(['num'])
//num() { return this.$store.state.num; } ๊ณผ ๊ฐ์
}
//store.js
state: {
num: 10
}
<p>{{ this.num }}</p>
Vuex์ ์ ์ธํ state ์์ฑ์ ๋ทฐ ์ปดํฌ๋ํธ์ ๋ ์ฝ๊ฒ ์ฐ๊ฒฐํด์ฃผ๋ ํฌํผ
computed()์ ์ ์ธํ๋ค.
//App.vue
import { mapGetters } from 'vuex'
computed() {
...mapGetters(['reverseMsg'])
}
//store.js
getters: {
reverseMsg(state) {
return state.msg.split('').reverse().join('');
}
}
<p>{{ this.reverseMsg }}</p>
Vuex์ ์ ์ธํ ๋ฉ์๋๋ค์ Vue ์ปดํฌ๋ํธ์ ๋ ์ฝ๊ฒ ์ฐ๊ฒฐํด์ฃผ๋ ํฌํผ
methods ํ๋์ ์ ์ธํ๋ค.
//App.vue
import { mapMutations } from 'vuex'
methods: {
...mapMutations(['clickBtn']),
authLogin() {},
displayTable() {}
}
//store.js
mutations: {
clickBtn(state) {
alert(state.msg);
}
}
//component
<button @click="clickBtn">popup message</button>
Vuex์ ์ ์ธํ ๋ฉ์๋๋ค์ Vue ์ปดํฌ๋ํธ์ ๋ ์ฝ๊ฒ ์ฐ๊ฒฐํด์ฃผ๋ ํฌํผ
methods ํ๋์ ์ ์ธํ๋ค.
//App.vue
import { mapActions } from 'vuex'
methods: {
...mapActions(['delayClickBtn']),
}
//store.js
actions: {
delayClickBtn(context) {
setTimeout(() => context.commit('clickBtn'), 2000);
}
}
//component
<button @click="delayCLickBtn">delay popup message</button>
Vuex์ ์ ์ธํ ์์ฑ์ ๊ทธ๋๋ ์ปดํฌ๋ํธ์ ์ฐ๊ฒฐํ๋ ๋ฌธ๋ฒ
//๋ฐฐ์ด ๋ฆฌํฐ๋ด
...mapMutations({
'clickBtn', //'clickBtn' : clickBtn
'addNumber' //addNumber(์ธ์)
])
Vuex์ ์ ์ธํ ์์ฑ์ ์ปดํฌ๋ํธ์ ํน์ ๋ฉ์๋์๋ค๊ฐ ์ฐ๊ฒฐํ๋ ๋ฌธ๋ฒ
//๊ฐ์ฒด ๋ฆฌํฐ๋ด
...mapMutations({
popupMsg: 'clickBtn' //์ปดํฌ๋ํธ ๋ฉ์๋ ๋ช
: Store์ mutation ๋ช
})