Javascript 将JS模板文本作为变量名

Javascript 将JS模板文本作为变量名,javascript,reactjs,redux,ecmascript-6,template-literals,Javascript,Reactjs,Redux,Ecmascript 6,Template Literals,我想知道是否可以将templateLiteral评估为变量名,然后使用它引用导入 到目前为止,这是我的代码: //These are redux action types import * as fileTypeOneActions from "./fileTypeOne/actionTypes" import * as fileTypeTwoActions from "./fileTypeTwo/actionTypes" import * as file

我想知道是否可以将templateLiteral评估为变量名,然后使用它引用导入

到目前为止,这是我的代码:

//These are redux action types
import * as fileTypeOneActions from "./fileTypeOne/actionTypes"
import * as fileTypeTwoActions from "./fileTypeTwo/actionTypes"
import * as fileTypeThreeActions from "./fileTypeThree/actionTypes"

export const updateApiResponse = (reducer, apiResponse) => {  

//reducer can be"fileTypeOne", "fileTypeTwo", or "fileTypeThree" as arguments

    const reducerKey = eval(`${reducer}Actions`)
    
    return {
        type: reducerKey.UPDATE_API_RESPONSE,
        apiResponse: apiResponse,
      }
}
基于作为'reducer'参数传递的字符串,我希望引用正确的导入并返回正确的redux操作类型。有什么想法吗

上面的eval语句不起作用

//These are redux action types
import * as fileTypeOneActions from "./fileTypeOne/actionTypes"
import * as fileTypeTwoActions from "./fileTypeTwo/actionTypes"
import * as fileTypeThreeActions from "./fileTypeThree/actionTypes"
const reducerMap = {
  1:fileTypeOneActions,
  2:fileTypeTwoActions,
  3:fileTypeThreeActions
}
export const updateApiResponse = (reducer, apiResponse) => {  

//reducer can be"fileTypeOne", "fileTypeTwo", or "fileTypeThree" as arguments

    //const reducerKey = eval(`${reducer}Actions`)
      const reducerKey = reducerMap(reducer) // reducer can be 1,2,3 or any other key
    
    return {
        type: reducerKey.UPDATE_API_RESPONSE,
        apiResponse: apiResponse,
      }
}

尽量避免评估。这太危险了。

稍微不同的版本更适合您的输入:

//These are redux action types
import * as fileTypeOneActions from "./fileTypeOne/actionTypes"
import * as fileTypeTwoActions from "./fileTypeTwo/actionTypes"
import * as fileTypeThreeActions from "./fileTypeThree/actionTypes"

const actions = {
  fileTypeOneActions,
  fileTypeTwoActions,
  fileTypeThreeActions
};

export const updateApiResponse = (reducer, apiResponse) => {  
    const reducerKey = actions[`${reducer}Actions`];
    return {
        type: reducerKey.UPDATE_API_RESPONSE,
        apiResponse: apiResponse,
      }
}

使用对象作为贴图是一种方法。我不认为这不是动态的(正如你在对另一个答案的评论中所说的)。

这会起作用,但我正在寻找一个更动态的解决方案1.)使用描述性名称,2)永远不要使用eval-特别是如果你需要问stackoverlow关于它的事Hanks Felix-我不清楚动态方面。在这个应用程序中,我们不断地添加减缩器,因此操作,因此操作对象需要手动更新。既然您已经必须导入它们,为什么更新对象会成为一个问题?如果需要,可以创建一个单独的模块,将所有这些操作作为命名导出导出(
export*作为fileTypeOneActions从“…”;
),然后将该模块导入(
import*作为操作从“…”
)。