728x90
🔎 Mutations과 Actions의 차이
✅ Mutations은 동기적 로직을 정의
✅ Actions는 비동기적 로직을 정의
Mutations에서 다수의 상태 변경이 비동기적으로 수행되었을 경우 예측 불가능한 상태가 되는 것을 막기 위한 의도가 있는 것 같다.
action에서는 mutations으로 commit을 행함으로써 간접적으로 상태를 변경하지만
actions을 호출하기 위한 dispatch method는 Promise를 반환하기 때문에 처리의 순서를 제어하는 것이 가능하다.
🔎 동기적 처리의 사용
📎actions 을 활용한 예시코드
new Vuex.Store({
state: {
count: 0
},
mutations: {
plus(state, num) {
stage.count += num;
}
},
actions: {
vote(context, isPlus) {
if(isPlus) {
context.commit('plus', 1);
} else {
context.commit('plus', -1);
}
}
}
})
(action에 전달된 isPlus가 true이면 count + 1, false라면 count - 1)
mutation은 state의 변경으로 놓아두고, action에서 처리를 행하게 하여 각 처리의 책임이 명확해 보인다.
📎mutation 을 활용한 예시코드
new Vuex.Store({
state: {
count: 0
},
mustations: {
countUp(state, num) {
state.count = (state.count + num) % 10;
}
},
actions: {
increment(context) {
context.commit('countUp', 1);
}
}
})
(0에서 9까지 카운트하고 9 초과 될경우 0으로 리셋)
변경처리가 state의 상태에 의존하는 변경이라면 mutations에서 처리를 하는게 더 효율적이어 보인다.
💡 결론
Mutation은 상태(state)의 변경 시 (ex. private한 setter)
Action은 공개적 처리나 복잡한 처리를 행할 때 (ex. public한 method)
728x90
'FRONTEND > Vue.js' 카테고리의 다른 글
[Vue] vue에 구글애널리틱스(GA4) 연동하기 (0) | 2023.05.18 |
---|---|
[Vue] arrow function 사용 시 주의 사항 (0) | 2023.05.17 |
[Vue] IOS의 setTimeout 이슈 (feat. $nextTick) (0) | 2023.05.09 |
[Vue] vuelidate를 사용하여 폼 검증하기 (Vue2) (0) | 2023.04.13 |
[Vue] 카드번호 자동 하이픈(-) 정규식 (0) | 2023.04.13 |