【发布时间】:2018-02-20 11:30:54
【问题描述】:
我想使用字符串创建一个组件列表。 在 Google/StackOverflow 上搜索,这似乎很容易:
import Light from 'light.jsx';
[...]
getComponent()
{
let DynamicComponent = "Light";
return <DynamicComponent />;
}
不幸的是,这种方法行不通。 我在非控制台收到此错误:
警告:
正在使用大写 HTML。始终使用小写 HTML React 中的标签。警告:标签 在此无法识别 浏览器。如果您打算渲染一个 React 组件,请以 一个大写字母。
我尝试了很多组合,例如:
return React.createElement(DynamicComponent, {}) };
return React.createElement("Light", {}) };
return <div> { React.createElement(DynamicComponent, {}) }</div>;
它们都返回相同的错误。
显然,如果我使用:
return <Light />
它有效。
【问题讨论】:
-
像这样创建一个元素和字符串的映射:
let map = {"Light": Light, "Fan": Fan},然后使用它:let DynamicComponent = map["Light"],然后您将能够像这样渲染它:<DynamicComponent />,如果它告诉我未能解决您的问题或您需要任何其他帮助。 -
嗨。谢谢你的回答,但你的解决方案不是我想要的。您正在创建一个将字符串连接到组件的关联数组(它有效)。在我的情况下(是创建命名空间导入系统的第一步,我不能直接使用该组件。我需要这样的东西: let mapsOfComponent = ["Light","Fan"] let DynamicComp = mapsOfComponent[0];返回
-
好的,但是在同一个文件中,您必须先导入所有组件,对吗?比如
import Light ....;, import Fan ....等? -
我使用一种奇怪的方法来实现某种命名空间导入,使用基于谷歌的教程(搜索反应命名空间,第一个结果)以允许通配符导入,因此每个新组件都必须添加到一个文件中仅(allimport.js),因此从数据库中获取的组件的动态列表可能有效:
import * as Dynamic from 'allimport.js';然后:let DynamicComponent = "Dynamic.Light"; return <DynamicComponent />然后在 allimport.js 中import Light from './light.jsx'; import Fan from './fan.jsx';
标签: javascript reactjs