Vue.js/Vuex

Vuex 9.mapMutations , mapActions

Jungsoomin :) 2020. 12. 20. 00:11

개요

mapMutations

  • Vuex 에 선언 된 Mutations 속성을 컴포넌트에 더 쉽게 Mapping 해주는 헬퍼
//사용.vue
import {mapMutations} from 'vuex'

methods: {
	...mapMutations({clickBtn:'clickBtn'}),
    authLogin() {},
    displayTable() {}
}

//store.js
mutations: {
	clickBtn(state) {
    	alert(state.msg);
    }
}

//template

<button @click="clickBtn"> popup message</button>

mapActions

  • Vuex 에 선언 된 Actions 속성을 컴포넌트에 더 쉽게 Mapping 해주는 헬퍼
//사용.vue

import {mapActions} from 'vuex'

methods: {
 ...mapActions({
 	delayClickBtn : 'delayClickBtn'
 })
}

//store.js
actions: {
	delayClickBtn(context) {
    	setTimeout( () => context.commit('clickBtn'), 2000);
    }
}

//template

<button @click="delayClickBtn"> delay popup message</button>

 

 


 사용

  • 이벤트에서 넘겨주는 인자를 바탕으로 name 의 이름을 가진 메서드가 자동으로 선언
  • 객체 전개 연산에서 꺼내온 value 값의 Vuex.Store 에 기술된 Mutations 메서드가 호출되는 형태
<script>
import {mapGetters, mapMutations} from 'vuex'

export default {
  //...
  
  methods: {
    // removeTodo (todoItem,index) {
    //   const itemInfo = {todoItem,index}
    //   this.$store.commit('removeOneItem',itemInfo);
    // },
    ...mapMutations({// 인자를 자동으로 넘겨버림
      removeTodo: 'removeOneItem'
    }),
    
  //...
  }
</script>
<!-- 사용, 인자를 자동으로 넘겨 줌 -->
<span class="removeBtn" v-on:click="removeTodo({todoItem,index})">
</span>

주의점

  • Helper 들은 Store 의 코드와 Component 의 코드를 그대로 이어주는 역할을 한다.
  • StoreState 를 변경(Mutations)하고, 백앤드서버에 요청(Actions)을 하는 비동기 메서드를 제공하는데 집중해야한다.
  • Component 단에서 발생하는 예외처리, 그 외의 로직은 Component의 methods에 적용하는게 옳다.
//해당 코드는 Helper 를 사용하기에 적절하지 않음.

methods: {
    addTodo () {
      if(this.newTodoItem !== '') {
        //commit() 으로 Vuex 에 접근
        this.$store.commit('addOneItem',this.newTodoItem);
      this.clearInput();
      } else {
        this.showModal = !this.showModal
      }
    },

'Vue.js > Vuex' 카테고리의 다른 글

Vuex 10. Store 모듈화, 프로젝트 구조화  (0) 2020.12.20
Vuex 8.mapState, mapGetters  (0) 2020.12.19
Vuex 7.Helper 함수 개요  (0) 2020.12.19
Vuex 6.Actions  (0) 2020.12.19
Vuex 5.Mutations  (0) 2020.12.19