如何解决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 语句不起作用。
解决方法
//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,}
}
尽量避免 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 actions = {
fileTypeOneActions,fileTypeTwoActions,fileTypeThreeActions
};
export const updateApiResponse = (reducer,apiResponse) => {
const reducerKey = actions[`${reducer}Actions`];
return {
type: reducerKey.UPDATE_API_RESPONSE,}
}
使用对象作为地图是可行的方法。我不明白这不是动态的(正如您在对另一个答案的评论中所声称的那样)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。