有没有一种方法可以将变量名嵌入文字字符串中而无需子字符串并将字符串重新构建在一起?
示例:
function(mode) {
return ${REACT_APP_<mode>_PREFIX_URL};
}
其中模式截取文字字符串(``)
作为传递的参数,该参数指向要查找的正确变量名。
这是输出示例
输出示例:
REACT_APP_ADMIN_PREFIX_URL
用于传递模式='ADMIN'
答案 0 :(得分:0)
如果我的问题正确,
function myFunc (mode) {
return obj[`REACT_APP_${mode}_PREFIX_URL`];
}
var obj = {
REACT_APP_ADMIN_PREFIX_URL : 'Hello'
}
console.log(myFunc('ADMIN'))// Hello
应该工作。
您也可以使用eval
,尽管我不建议这样做。
var REACT_APP_ADMIN_PREFIX_URL : 'Hello';
function myFunc (mode) {
return eval(`REACT_APP_${mode}_PREFIX_URL`);
}
还应该返回相同的响应。
答案 1 :(得分:0)
假设您有一个包含常量的.env文件,其内容如下:
REACT_APP_ADMIN_PREFIX_URL=admin_str
REACT_APP_DEV_PREFIX_URL=dev_str
...
然后您可以在您的(当前)文件中添加
:function(mode) {
return process.env[`REACT_APP_${mode.toUpperCase()}_PREFIX_URL`};
// this will be process.env[`REACT_APP_ADMIN_PREFIX_URL`]
// which is `admin_str`
}
答案 2 :(得分:0)
如果REACT_APP_ADMIN_PREFIX_URL
在全局范围内是可访问的,则可以使用与访问任何其他对象上的属性相同的方式来访问它,例如:
const val = window[`REACT_APP_${mode}_PREFIX_URL`];
return `REACT_APP_${mode}_PREFIX_URL`;
(假设应用在浏览器中运行,其中“ window”是全局对象)
使用配置变量污染全局范围可能很难维护,因此,我建议尽可能进行以下操作:
const PrefixUrls = {
ADMIN: 'foobar'
}
function(mode) {
return PrefixUrls[mode];
}
答案 3 :(得分:0)
const CONSTANTS = {
REACT_APP_ADMIN_PREFIX_URL: '...',
REACT_APP_OTHER_PREFIX_URL: '...',
}
function(mode) {
return CONSTANTS['{REACT_APP_'+mode+'_PREFIX_URL'];
}
没有没有的方法可以使用变量