是否可以遍历数组以动态生成反应组件?

Chr*_*ris 5 javascript jsx ecmascript-6 reactjs

不确定标题是否完全清楚(不知道如何措辞)所以让我解释一下。

我想尝试将组件名称列表存储在数组中,然后循环使用map(或合适的等效项)以将每个数组值显示为 JSX 组件。

所以类似的东西(感谢这段代码不起作用,只是想展示我希望实现的目标):

render(){
  let links = ['DashboardLink', 'CoursesLink', 'AssignmentsLink'];
  return (
    <div>{
      links.map((Link) => {
        return <Link key={Link} />
      }
    }</div>
  )
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,结果是:

<div>
  <DashboardLink key='DashboardLink' />
  <CoursesLink key='CoursesLink' />
  <AssignmentLink key='AssignmentLink' />
</div>
Run Code Online (Sandbox Code Playgroud)

然后每个组件将在 div 中呈现。

我对 React 和 ES6 非常陌生,因此对于任何明显的错误,我深表歉意。

谢谢!

San*_*h K 6

然后您可以使用辅助函数:

 render(){
   var links = ['DashboardLink', 'CoursesLink', 'AssignmentsLink'];
   var findComponent: function (name){
     switch (name){
         case 'DashboardLink':
             return (<DashboardLink />);
         case 'CoursesLink':
             return (<CoursesLink />);
         case 'AssignmentsLink':
             return (<AssignmentsLink />);
         default:
             return null; //You might want to return something else here//
     }
   }; 
   return (
     <div>
       links.map((Link) => {
         return findComponent(Link);
       }
     </div>
  );
}
Run Code Online (Sandbox Code Playgroud)

您也可以将此功能放在其他地方...

使用 React.createElement 方法创建自定义组件:第一个参数是标签名称,第二个是带有属性的对象,您可以添加子项作为第三个参数。

render(){
   var links = ['DashboardLink', 'CoursesLink', 'AssignmentsLink'];
   return (
     <div>
       links.map((Link) => {
         return React.createElement(Link, {key: Link});
       }
     </div>
  );
}
Run Code Online (Sandbox Code Playgroud)

参考:https : //facebook.github.io/react/docs/glossary.html