通过Vuex操作将参数传递给Vuex获取器

时间:2019-01-17 07:46:25

标签: javascript vue.js vuex

我有一个Vuex吸气剂,可以从应用程序中的各个组件调用它。但是,我发现一个案例在调用getter之前需要稍微复杂一点的逻辑,因此我使用了Vuex Action。如何从我的操作中使用参数调用getter函数?

我使用常量来命名getter / mutations / actions,因此我的getter定义如下:[GETTER_NAME]: state => param => { return {/.../} }。在我的Vuex动作中,我想按getters[GETTER_NAME](someParam)调用getter。但是,这似乎不起作用(即使getters[GETTER_NAME]返回一个函数)。

从组件调用getter可以很好地工作。我只是创建computed函数并使用...mapGetters({getterName: GETTER_NAME})。要使用参数调用getter,我只说getterName(someParam)

[GETTER_NAME]: state => param=> {
    return {/.../}
},

[ACTION_NAME]: (context, param) => {
    getters[GETTER_NAME](param)
      ? context.commit(MUTATION_X, param)
      : context.commit(MUTATION_Y, param);
}

getter被调用,但是,它返回函数而不传递参数。我是在做错什么还是我误解了Vuex中吸气剂的工作方式?

2 个答案:

答案 0 :(得分:3)

您需要在context.getters[GETTER_NAME](someParam)内像actions一样拨打电话。

[GETTER_NAME]: state => param=> {
return {/.../}
},

[ACTION_NAME]: (context, param) => {
   context.getters[GETTER_NAME](param)
     ? context.commit(MUTATION_X, param)
     : context.commit(MUTATION_Y, param);
}

答案 1 :(得分:1)

在动作中注入了参数:dispatchcommitgettersrootState。因此,您可以像这样访问getter:

ACTION_NAME: ({ commit, getters }, payload) => {
    let MY_VARIABLE = getters.GETTER_NAME(payload)
    console.log(MY_VARIABLE)
}

即使您尝试从其他模块访问getter,此方法也可以正常工作。 尽管您可以通过context.getters将getter与上下文一起使用,但是以这种方式使用时,语法在操作内部会有点冗长。