首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >react元素的动态渲染

react元素的动态渲染
EN

Stack Overflow用户
提问于 2018-10-18 04:20:13
回答 2查看 635关注 0票数 1

我有一个组件数组

代码语言:javascript
复制
[
  {
    componentName: 'FieldHeader',
    props: {title:'bla bla},
    showOnDate: '01/01/2019'
  },
  {
    componentName: 'RadioButton',
    props: {},
    showOnDate: '01/01/2018'
  }
]

我正在尝试从这个数组中动态创建元素。

我有一个包含所有组件的数组。

我是这样想的:

代码语言:javascript
复制
for (var i=0; i < objects.length; i++) {
        <components[objects[i].componentName] {...props}>
}

但是做一些类似这样的事情:

代码语言:javascript
复制
<components['FieldHeader'] {...props}> 

引发编译错误。

有没有办法动态呈现像这样的react元素?

EN

回答 2

Stack Overflow用户

发布于 2018-10-18 04:37:33

不能使用字符串类名实例化组件。

相反,尝试这样做:

代码语言:javascript
复制
const components = [
  {
    component: <FieldHeader {...props} >,
    props: {title:'bla bla},
    showOnDate: '01/01/2019'
  },
  {
    component: <RadioButton {...props} >,
    props: {},
    showOnDate: '01/01/2018'
  }
];

return components.map((c) => c.component);
票数 0
EN

Stack Overflow用户

发布于 2018-10-18 04:53:40

尝试使用.map().forEach()。别忘了退回你的组件。

导入您的组件,例如:import FieldHeader from './components'

代码语言:javascript
复制
// your components array
var myArr = [
    {
        componentName: FieldHeader,
        props: {title:'bla bla},
        showOnDate: '01/01/2019'
    },
    {
        componentName: RadioButton,
        props: {},
        showOnDate: '01/01/2018'
    }
  ]

现在,在render函数中:

代码语言:javascript
复制
render(){
    return(
        <div>
            {
                myArr.map((obj, i) => {
                    var ComponentName = obj.componentName;
                    return <ComponentName props={obj.props} />
                })
            }
        </div>
    )
}

虽然,显然这可以简化为更少的代码,但我根据您问题中的格式保留了它,以使其更容易。希望这能起作用!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52863000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档