Javascript 如何将字符串转换为类名(而不在窗口中定义它)?
Javascript 如何将字符串转换为类名(而不在窗口中定义它)?,javascript,reactjs,ecmascript-6,brunch,es6-module-loader,Javascript,Reactjs,Ecmascript 6,Brunch,Es6 Module Loader,从“/TestClass”导入TestClass 给定字符串'TestClass',如何在该文件中引用TestClass eval('TestClass')不起作用,因为未定义TestClass 但是,如果我执行let Test=TestClass,然后执行eval('Test'),它会根据需要返回TestClass的构造函数 当eval('Test')工作时,为什么eval('Test')不工作 上下文: 给定许多元素,如,我想创建一个通用函数,将适当的React组件呈现到这些元素中。这些组件
从“/TestClass”导入TestClass
给定字符串'TestClass'
,如何在该文件中引用TestClass
eval('TestClass')
不起作用,因为未定义TestClass
但是,如果我执行let Test=TestClass
,然后执行eval('Test')
,它会根据需要返回TestClass
的构造函数
当eval('Test')
工作时,为什么eval('Test')
不工作
上下文:
给定许多元素,如
,我想创建一个通用函数,将适当的React组件呈现到这些元素中。这些组件类将在执行此函数之前导入到文件中
注意:使用Brunch(类似于webpack)作为构建系统。我不知道
Brunch
做什么,但您可以在导入后创建一个包含组件的对象,并使用该对象检索给定字符串的组件。比如:
import TestClass1 from './TestClass1'
import TestClass2 from './TestClass2'
const componentMap = {
TestClass1: TestClass1,
TestClass2: TestClass2
}
// You can just use the map to get the component given the name
const component = componentMap[componentName]
你们的包装系统是什么?网页包?Browserify?你最好重新考虑你的解决方案。新模块系统的全部要点是,它可以进行静态分析。由于您无法动态导入,因此动态实例化没有多大意义。它是否有助于您实现您能实现和不能实现的功能?@RushyPanchal使用Bruch作为构建系统“为什么
eval('TestClass')
不起作用?”-这将在真实的ES6环境中实现。只是导入的变量被传输到相应模块上的属性访问。谢谢!这会奏效的。在给定的['TestClass1','TestClass2']
中,是否有任何自动定义组件映射的方法?@AlishanLadhani:No.@AlishanLadhaniconst componentMap={TestClass1,TestClass2}代码>@zerkms谢谢。总比复制名字好。但是我必须手写吗?给定任意长度的字符串数组,我可以用某种循环创建componentMap
。@AlishanLadhani:为什么从字符串开始?从已经显式导入的类开始。当然,如果您是自动生成的,只需以相同的方式生成componentMap
对象文本即可。