我试图像这样动态调用一个组件
var Tagname = 'Species';
options.push(<Tagname {...attrs}/>);
Run Code Online (Sandbox Code Playgroud)
我在控制台中收到警告
Warning: <Species /> is using uppercase HTML. Always use lowercase HTML tags in React.
Warning: The tag <Species> is unrecognized in this browser. If you meant to render a React component, start its name with an uppercase letter.
Run Code Online (Sandbox Code Playgroud)
所有其他代码工作正常.但是这个组件不起作用.我怎样才能解决这个问题?
May*_*kla 10
是的,您可以动态调用组件,但它应该是组件本身而不是字符串.
像这样:
var Tagname = Species; //component itself, not string
<Tagname {...attrs}/>;
Run Code Online (Sandbox Code Playgroud)
因为JSX将获得编译成React.createElement(Component, props, ...children)和Component将是一个字符串,如果它的HTML标签,否则反应成分.
因此,如果您通过React.createElement("Species", props, ...children),react会将其视为html标记而不是反应组件.
更新:
你可以做一件事,为每个组件创建一个地图,如下所示:
const Map = {
"componenet1": Component1,
"componenet2": Component2
}
Run Code Online (Sandbox Code Playgroud)
现在您可以使用字符串键访问组件,如下所示:
let name = "componenet1";
let Tagname = Map[name];
<Tagname {...attrs}/>;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3490 次 |
| 最近记录: |