vuex 同一个模块下的 mutations 方法之间如何相互调用?

如下情况,如果f2需要调用f1,f2 该怎么写?

目前把所有方法都写成 actions 了,但是因为 actions 返回 Promise,感觉非常麻烦。

mutations: {
    f1: (state, parms_a, params_b) => {
        
    },
    f2: (state, parms_a, params_b) => {
        // 需要调用 f2()
    },
},

目前看到的方式大概分为两种:
1、把 mutations 改为 action,如果有先后关系那么嵌套调用;
2、在 actions 方法中调用两个 mutations ,然后外部调用这个 actions 方法;

感觉有点恶心啊

阅读 7.9k
5 个回答
_f1(state, params_a, params_b){
.....
}

......

mutations: {
    f1: _f1,
    f2: (state, params_a, params_b) => {
        _f1(state, params_a, params_b)
    },
},
  1. 改成 action,这是设计问题
  2. 提取出来一个函数,分别在两个 mutation 里调用
mutations: {
    f1: (state, parms_a, params_b) => {
       
    },
    f2: (state, parms_a, params_b) => {
        store.commit('f1')
    },
},

action 并不是非要写成 promsie 的形式。如果 f2 有自己的业务逻辑并且会调用 f1 的话,就把 f2 改成 action

另外最好的做法就是一个 mutation 只修改一个 state,而不是把所有的业务逻辑都写在里面,把业务放在 action 当中。mutation 只把它当作 setState 来用。

mutations: {
    f1: (state, parms_a, params_b) => {
        this.commit('<!--namespace-->/f2',<!-- some params-->)
    },
    f2: (state, parms_a, params_b) => {
        // 需要调用 f2()
    },
},
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进