Store의 4가지 속성을 더 간편하게 코딩하게 하는 방법
import { mapState } from 'vuex'
import { mapGetters } from 'vuex'
import { mapMutations } from 'vuex'
import { mapActions } from 'vuex'
export default {
computed(){
...mapState(['num']), ...mapGetters(['countedNum'])
},
methods: {
...mapMutations(['clickBtn']), ...mapActions(['asyncClickBtn'])
}
}
// App.vue
import { mapState } from 'vuex'
computed() {
...mapState(['num'])
// num() {return this.$store.state.num;}
}
// store.js
state: {
num: 10
}
// template
<!-- <p>{{this.$store.state.num}}</p> -->
<p>{{this.num}}</p>
// App.vue
import { mapGetters } from 'vuex'
computed() { ...mapGetters(['reverseMessage'])}
// store.js
getters: {
reversMessage(state){
reuturn state.msg.split('').reverse().join('');
}
}
// template
<!-- <p>{{this.$store.getters.reverseMessage}}</p> -->
<p>{{this.reverseMessage}}</p>
// App.vue
import {mapMutations} from 'vuex'
methods: {
...mapMutations(['clickBtn']),
openModal(){}
}
// store.js
mutations: {
clickBtn(state){
alert(state.msg);
}
}
<button @click="clickBtn">popup message</button>
// App.vue
import { mapActions } from 'vuex'
methods: {
...mapActions(['clickBtn'])
}
// store.js
mutations: {
clickBtn(context){
setTimeout(() => context.commit('clickBtn'), 2000);
}
}
<button @click="clickBtn">delay popup message</button>
// 배열 리터럴
...mapMutations([
// 'clickBtn' : clickBtn
'clickBtn',
// addNumber(인자) -> 따로 인자를 적지 않아도 자동으로 인자를 넘겨줌
'addNumber'
])
// 객체 리터럴
...mapMutations({
// 컴포넌트 메서드 : Store의 mutation
popupMsg: 'clickBtn'
})