ex) this.$store.state.변수명 -> 컴포넌트가 많아질수록 추척이 어려움.
import { mapState, mapGetters, mapMutations, mapActions } from 'vuex'
export default{
computed() { ...mapStore(['num']), ...mapGetters(['countedNum']) },
methods : { ...mapMutations(['clickBtn']), ...mapActions(['asyncClickBtn']) }
}
... => ES6 Object Spread Operator
// App.vue
import { mapState } from 'vuex'
computed(){
...mapState(['num'])
// num() { return this.$store.state.num; }
}
// store.js
state: {
num: 10
}
<!-- <p>{{this.$store.state.num }} </p> -->
<p>{{this.num}}</p>
// App.vue
import { mapGetters } from 'vuex'
computed(){
...mapGetters(['reverseMessage'])
}
// store.js
getters: {
reverseMessage(state){
return state.msg.split('').reverse().join('');
}
}
<p>{{this.reverseMessage}}</p>
// App.vue
import { mapMutations } from 'vuex'
methods:
...mapMutations(['clickBtn']),
authLogin(),
displayTable() {}
}
// store.js
mutations: {
clickBtn(state){
alert(state.msg);
}
}
<button @click="clickBtn">popup message</button>
// App.vue
import { mapActions } from 'vuex'
methods:
...mapActions(['delayClickBtn']),
}
// store.js
actions: {
delayClickBtn(context){
setTimeout(() => context.commit('clickBtn', 2000);
}
}
<button @click="delayClickBtn"> delay popup message</button>
// 배열 리터럴
...mapMutations([
// 'clickBtn': clickBtn -> ES6 키와 속성값이 같은 경우 축약형으로 됨.
'clickBtn',
// addNumber(인자) mapMutataions의 좋은 점이 따로 인자 설정을 안해도 됨.
'addNumber',
])
// 객체 리터럴
...mapMutations([
// 컴포넌트 메서드 명 : Store의 Mutataion명
popupMsg : 'clickBtn'
])