我有一个代表自定义React组件的键列表。根据这个列表,我想渲染适当的组件。我有一个对每个组件的引用,所以我可以创建一个key -> Component
的映射,它允许我创建一个组件列表。但是我还没有找到一种方法来呈现这个列表。
示例:
input: ["componentA", "componentB", "componentC"]
output:
<ComponentA />
<ComponentB />
<ComponentC />
这是我到目前为止所得到的,但是我不确定如何呈现组件列表:
function renderElements(keys) {
const components = {
componentA: ComponentA,
componentB: ComponentB,
componentC: ComponentC,
};
const componentsToRender = keys.map(key => components[key]);
return (
<div>
{componentsToRender}
</div>
);
}
答案 0 :(得分:5)
对我有用的是什么:
render() {
const components = [ComponentA, ComponentB, ComponentC] // references to components
return (
<div>
{components.map((comp, i) => React.createElement(comp, { key: i})}
</div>
);
}
由于嵌套JSX的问题(可能与Typescript相关),必须使用对组件的引用并且必须使用React.createElement
。
答案 1 :(得分:1)
试试这个。它应该工作。
render()
{
const input=["ComponentA", "ComponentB", "ComponentC"]
return(
<div>
{
input.map((comp,i)=>){
return <{comp} key={i} />
}
}
</div>
)
}
注意:输入= [&#34; ComponentA&#34;,&#34; ComponentB&#34;,&#34; ComponentC&#34;];自定义 组件名称应在Capital
中
答案 2 :(得分:1)
render() {
return (
<div>
{componentsToRender.map((Component, key) => (<Component key={key}/>))}
<div>
);
}
答案 3 :(得分:0)
由于某种原因,使用React documentation中指定的map函数对我不是li的任何组件/元素都不起作用,我必须明确指定一个return语句。
options = optionsArray.map(o => {
// replace option with your component name
return <option key={o.name} value={o.name}>{o.name}</option>
})
然后我渲染了生成的元素。如果需要,您也可以内联。
<div>
{options}
</div>