본문 바로가기
Framework/vuex

Actions (vuex)

by cariño 2023. 1. 17.
728x90
반응형

mutation(state를 관리, 변화 시키는 역할)은 모든 기능이 동기로 동작한다. 

하나의 데이터에 여러개의 컴포넌트가 접근하려고 할 때 효율적으로 관리하기 위함인데

비동기 로직들이 포함되면 그 순서를 정확하게 알기 어렵다. 그래서 비동기 로직은 Actions를 이용한다. 

ex) actions의 예제

회원가입시 서버와 통신을 할때 회원가입의 중복검사, 등등의 함수를 실행한 후 state에 추가해달라는 값을 마지막에 commit한다. 

 

mutations을 통해 state를 변화시키고,  해당 mutation을 동작시키는 비지니스 로직으로 Actions를 사용한다. 

 

mutations을 commit해서(발생시킴) state의 값을 변경했다면

컴포넌트에서 Actions를 실행시키는 것은 Dispatch를 이용한다.

 

dispatch로 actions을 실행-> actions내에서 mutation을 commit -> mutations이 state를 변경

*dispatch: 보내다 (신호를)

 


 

({ commit })

mutations: {
 addUsers: (state, payload) => {
  state.allUsers.push(payload)
 }
},
actions: {
 addUsers: ({ commit }, payload) => { //function({commit})
 commit('addUsers', payload)
}

- ({ commit })은 context을 간단하게 써준 객체형태로 불러와준 것.

- payload를 인자로 붙여도 되지만, context라는 하나의 값이기에 바깥에 payload를 받는다.

 

 

 

 

dispatch (actions을 불러옴)

 methods: {
      ...mapMutations(['addUsers']),
      signUp() {
        let userObj = {
          userId: this.userId,
          password: this.password,
          name: this.name,
          address: this.address,
          src: this.src
        }
        // this.addUsers(userObj)
        this.$store.dispatch('addUsers', userObj)
        this.clearForm()
      },

 

그럼 store파일에서 Actions의 addUsers가 실행이 된다.

payload를 받아서  mutation ({commit})의 addUsers가 commit(실행) 될 것 

 

 

dispatch도 줄여서 함수처럼 사용할 수 있다. 

 methods: {
      ...mapActions(['addUsers']),
      signUp() {
        let userObj = {
          userId: this.userId,
          password: this.password,
          name: this.name,
          address: this.address,
          src: this.src
        }
        //this.$store.dispatch('addUsers', userObj)
        this.addUsers(userObj)
        this.clearForm()
      },

 

728x90

'Framework > vuex' 카테고리의 다른 글

getter, mapGetters, mapState (vuex)  (0) 2023.01.16
mutation (vuex)  (0) 2023.01.12

댓글