這可能是一個完整的noob問題,但我無法解決這個問題。我有一個React組件,並且在其渲染方法中,我想渲染一些動態傳入的組件(通過道具)。使用.map渲染多個React組件
這是我從渲染方法(ES6,與巴貝爾transpiled)
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>
)
如果你只呈現一個組件工作的呢? – Mathletics
只需在頁面上呈現組件?是的,這是有效的。基本上用例是允許這些組件被重用和動態指定。 –
「facetMap」是一組字符串還是一組Component類? [動態組件名稱](http://stackoverflow.com/questions/29875869)在SO上已被很好地覆蓋。 – Mathletics