五、Vuex - Action
Action 异步操作
通常处理异步操作, 通过 store.dispatch 派发一个 action, 在 action 内部进行提交mutation 变更状态
- action函数接收一个与store实例具有相同方法和属性的context对象。
- 可以调用 context.commit 提交 mutation
- 通过 context.state 和 context.getters 获取 state 和 getters
定义 Action
const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment (state) { state.count++; } }, actions: { increment (content) { content.commit('increment') } } });
使用 dispatch 分发 action
// 普通方式 this.$store.dispatch('increment'); // 派发并传参 this.$store.dispatch('increment', 100); // 以对象的形式分发 this.$store.dispatch({ type: 'increment', num: 100 });
mapAction 辅助函数
import { mapAction } from 'vuex' export default { methods: { // 以数组的形式 ...mapActions([ // 将 this.increment() 映射为 this.$store.dispatch('increment') 'increment', // 将 this.incrementBy(num) 映射为 this.$store.dispatch('incrementBy') 'incrementBy' ]), ...mapActions({ // 将 this.add() 映射为 this.$store.dispatch('increment') add: 'increment' }) } }
组合action
// 返回 Promise, 方便成功后派发下一个action actions: { actionA ({ commit }) { return new Promise((resolve, reject) => { setTimeout(() => { commit('someMutation'); resolve(); }, 1000); }); }, // 派发另一个action actionB ({ dispatch, commit}) { return dispatch.('actionA').then(() => { commit('someOtherMutation'); }); } } // 派发action 可以通过 .then 方法指导执行完成了 this.$store.dispatch('actionA').then(() => { // 派发并处理完了 });
相关推荐
yuzhu 2020-11-16
85477104 2020-11-17
KANSYOUKYOU 2020-11-16
sjcheck 2020-11-03
怪我瞎 2020-10-28
源码zanqunet 2020-10-28
gloria0 2020-10-26
王军强 2020-10-21
学习web前端 2020-09-28
QiaoranC 2020-09-25
anchongnanzi 2020-09-21
安卓猴 2020-09-12
Macuroon 2020-09-11
kiven 2020-09-11
LittleCoder 2020-09-11
Cheetahcubs 2020-09-13
小焊猪web前端 2020-09-10
颤抖吧腿子 2020-09-04
softwear 2020-08-21