【发布时间】:2016-03-02 19:07:29
【问题描述】:
这可能是一个完整的菜鸟问题,但我无法弄清楚这一点。我有一个 React 组件,在它的渲染方法中,我想渲染一些动态传入的组件(通过道具)。
这是我从渲染方法返回的结果(ES6,用 Babel 转译)
return (
<div className={openState}>
/* Shortened for brevity*/
{this.props.facets.map(function(f) {
var CompName = facetMap[f.type]
return <CompName key={f.id} />
})}
/* Shortened for brevity*/
</div>
)
facetMap 只是将字符串与传入的“类型”匹配的映射。我似乎无法让组件实际呈现在页面上。
我将 .map() 方法的结果存储在一个 var 中,然后将其记录到控制台,它显示了一个组件数组。然而,render 方法中的{facetComponents} 具有相同的结果。
编辑,对解决方案感兴趣的人
因为我真的无法在任何地方找到答案,这是我完成的解决方案,感谢@Mathletics
//Components imported using ES6 modules
import OCFacetText from "./oc-facet-text"
// Etc...
//Later on, in my render method:
let facetMap = {
"text": OCFacetText,
"number": OCFacetNumber,
"numberrange": OCFacetNumberRange,
"boolean": OCFacetBoolean,
"checkbox": OCFacetCheckbox,
// Etc, etc...
}
let facetComps = facets.map(function(f) {
var CompName = facetMap[f.type]
return <CompName key={f.id} />
})
//Finally, to render the components:
return (
<div className={openState}>
/* Shortened for brevity*/
{facetComps}
/* Shortened for brevity*/
</div>
)
【问题讨论】:
-
如果你只渲染一个组件,它可以工作吗?
-
只是在页面上渲染组件?是的,这行得通。基本上,用例允许这些组件被重用和动态指定。
-
facetMap是一组字符串还是一组Component类? Dynamic component names 已在 SO 上得到很好的报道。 -
只是字符串。我昨天在搜索中实际上遇到了这个问题。我希望我的开发人员能够传入“文本”而不是“OCFacetText”。
标签: javascript reactjs