首页 > 解决方案 > ReactJS 模板文字作为变量名

问题描述

我想知道是否可以将 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 语句不起作用。

标签: javascriptreactjsreduxecmascript-6template-literals

解决方案


稍微不同的版本可以更好地映射到您的输入:

//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,
      }
}

使用对象作为地图是要走的路。我看不出这不是动态的(如您对另一个答案的评论中所述)。


推荐阅读