Javascript 如何引用vuex';常数';带变量的命名操作?

Javascript 如何引用vuex';常数';带变量的命名操作?,javascript,constants,vuex,Javascript,Constants,Vuex,我在vuex应用商店中有如下操作: [FETCH_ADAM_BROWN_LIST](state)({commit}) { /* Action logic */ }, setCurrentUser: function ({ dispatch, commit, getters, rootGetters }, userDB) { commit('setCurrentUser', userDB) dispatch('resetDashboards', userDB.dashboa

我在vuex应用商店中有如下操作:

 [FETCH_ADAM_BROWN_LIST](state)({commit}) {
     /* Action logic */
 },
setCurrentUser: function ({ dispatch, commit, getters, rootGetters }, userDB) {
  commit('setCurrentUser', userDB)
  dispatch('resetDashboards', userDB.dashboards)
}
let type = 'User'
this.$store.dispatch('setCurrent' + type)
我想访问类似的名称操作,例如使用如下变量获取\u CHRIS\u MATHISON\u列表:

this.$store.dispatch(`FETCH_${this.person}_LIST`);
但是,这会引发一个错误:

VM90646:37 [vuex] unknown action type: FETCH_ADAM_BROWN_LIST
但当我指定它为常数时,它会起作用:

this.$store.dispatch(FETCH_ADAM_BROWN_LIST);

如何使用变量访问“常量”命名操作?

您尝试过使用mapActions吗?这可以满足你的需要。有用链接:

我在Vuex应用商店中使用此结构。许多排雷行动都是使用串联字符串作为参数进行调度的。但我的行动是这样宣布的:

 [FETCH_ADAM_BROWN_LIST](state)({commit}) {
     /* Action logic */
 },
setCurrentUser: function ({ dispatch, commit, getters, rootGetters }, userDB) {
  commit('setCurrentUser', userDB)
  dispatch('resetDashboards', userDB.dashboards)
}
let type = 'User'
this.$store.dispatch('setCurrent' + type)
然后,我可以这样发送:

 [FETCH_ADAM_BROWN_LIST](state)({commit}) {
     /* Action logic */
 },
setCurrentUser: function ({ dispatch, commit, getters, rootGetters }, userDB) {
  commit('setCurrentUser', userDB)
  dispatch('resetDashboards', userDB.dashboards)
}
let type = 'User'
this.$store.dispatch('setCurrent' + type)

你的代码有什么奇怪的地方吗。删除
(状态)
,使操作接收一个
上下文
对象,在您的情况下,该对象将在参数中分解<代码>({commit})

这样设置,让我知道这是否有效

[FETCH_ADAM_BROWN_LIST]({commit}) {
     /* Action logic */
 },

正如您所观察到的,当您将
FETCH{this.person}\u LIST
传递给
dispatch
时,被调度的操作类型是连接的常量名称,而不是常量变量的实际值

要获得常量变量的实际值,可以使用函数

从:

eval()
函数的参数是一个
字符串。如果字符串
表示表达式,eval()对表达式求值

您可以这样使用它:

 [FETCH_ADAM_BROWN_LIST](state)({commit}) {
     /* Action logic */
 },
setCurrentUser: function ({ dispatch, commit, getters, rootGetters }, userDB) {
  commit('setCurrentUser', userDB)
  dispatch('resetDashboards', userDB.dashboards)
}
let type = 'User'
this.$store.dispatch('setCurrent' + type)
const FETCH_ADAM_BROWN_LIST='customAction';
const person='ADAM_BROWN';
const actionToDispatch=`FETCH\${person}\u LIST`;
console.log(eval(actionToDispatch));//自定义操作