Javascript 将JS模板文本作为变量名
我想知道是否可以将templateLiteral评估为变量名,然后使用它引用导入 到目前为止,这是我的代码: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
//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*作为操作从“…”
)。