ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Vue.js] Vuex - (2) Helper 함수
    Front-End(Web)/Vue 2021. 6. 11. 16:48
    반응형

    이번에는 Vuex에서 Store의 상태, getter, 메서드들을 좀 더 용이하게 사용하는 Helper 함수에 대해 알아보겠다.

     

    * 이 글은 캡틴판교님의 Vue.js 강의 및 블로그를 기반으로 학습한 내용을 정리하고 있습니다.


    💚 Helper 함수란?

    Vuex의 내장함수로, Store의 아래 네 가지 속성을 간편하게 코딩하는 방법이다. (Synthetic Sugar에 해당)

    • state => mapState
    • getters => mapGetters
    • mutations => mapMutations
    • actions => mapActions

     

    - 사용법

    // App.vue
    import { mapState, mapGetters, mapMutations, mapActions } from 'vuex'
    
    export default {
      computed() {
        ...mapState(['num']),
        ...mapGetters(['countedNum'])
      },
      methods: {
        ...mapMutations(['clickBtn']),
        ...mapActions(['asyncClickBtn'])
      }
    }

    vuex에서 각 Helper 함수를 가져와서 사용하면 된다. 필요한 속성의 키값을 배열로 입력하고, 객체 전개 연산자(ES6문법)로 적용한다.

    computed() {
      ...mapState(['num', 'str']),
    }
    
    // 해석
    computed() {
      num: // value,
      str: // value,
    }

     

    - 사용 예시

    1) mapState

    Vuex에 선언한 state 값을 Vue 컴포넌트에 더 쉽게 연결해주는 헬퍼 함수. data() 가 아닌 computed() 에 전개연산자로 선언.

    // App.vue
    import { mapState } from 'vuex'
    
    computed: {
      // num() { return this.$store.state.num; }
      ...mapState(['num'])
    }
    
    // <p>{{ this.$store.state.num }}</p>
    <p>{{ this.num }}</p>

     

    2) mapGetters

    Vuex에 선언한 getters 계산된 상태값을 Vue 컴포넌트에 더 쉽게 연결해주는 헬퍼 함수. 마찬가지로 computed() 에 선언한다,

    // App.vue
    import { mapGetters } from 'vuex'
    
    computed: {
      ...mapGetters(['reverseMsg'])
    }
    
    // <p>{{ this.$store.getters.reverseMsg }}</p>
    <p>{{ this.reverseMsg }}</p>

     

    3) mapMutations, mapActions

    Vuex에 선언한 동기(mutations), 비동기(actions) 메서드들을 Vue 컴포넌트에 더 쉽게 연결해주는 헬퍼 함수.

    컴포넌트의 methods 필드에 선언하며, 마찬가지로 전개연산자를 활용하여 연결할 수 있다.

    // App.vue
    import { mapMutations, mapActions } from 'vuex'
    
    methods: {
      ...mapMutations(['clickBtn']),
      ...mapActions(['asyncClickBtn']),
    }
    
    // store.js
    mutations: {
      clickBtn(state) {
        alert(state.msg);
      }
    },
    actions: {
      asyncClickBtn(context) {
        setTimeout(() => context.commit('clickBtn'), 2000);
      }
    }
    
    <button @click="clickBtn>click</button>
    <button @click="asyncClickBtn>async click</button>

     

    * 메서드명 재지정

    헬퍼 함수들을 활용할 때, store에 설정한 상태, 메서드명과 다르게 설정할 경우 배열이 아닌 객체형태로 설정할 수 있다. 

    이 때, key 값이 컴포넌트에서 활용하고자 하는 상태, 메서드명이 될 것이다.

    methods: {
      ...mapMutations({
        localMethod: 'globalMethod',
      })
    }

    확실히 react-redux 문법과 느낌이 비슷하다고 생각됬다.

    장점은 Redux는 useSelector(상태)는 콜백, useDispatch(메서드)는 액션을 넘기는 등 문법이 가지각색이라면,

    Vuex의 경우엔 모든 필드(state, getters, 메서드들)의 문법이 일관적이라는 장점이 있기 때문에, Vue의 장점인 통일성이 좀 더 부각됬다.

     

    이제 Vue 프로젝트에 필요한 기본적인 내용은 어느정도 진행되었고, 이후 강의는 Vue로 실제 구현을 하면서 팁내용을 정리하려고 한다.

    반응형

    'Front-End(Web) > Vue' 카테고리의 다른 글

    [Vue.js] 컴포넌트 톺아보기  (0) 2021.06.14
    [Vue.js] Vuex - (3) Store 모듈화  (0) 2021.06.13
    [Vue.js] Vuex - (1) Vuex 기본  (0) 2021.06.10
    [Vue.js] Template 문법  (0) 2021.06.03
    [Vue.js] Vue Router  (0) 2021.06.02
Designed by Tistory.