2017-09-26 125 views
0

例如,我想呈現一個命名的react組件的數組,例如<Foo />,<Bar /><Baz />如何渲染一個JSX元素(React組件)數組

const rendered = []; 
const getItems = this.props.itemslist.map((item, key) => { 
const TYPE = item.type; 
rendered.push(<TYPE data-attributes={attributes} key={key} />); 
}); 
return (
    <Grid> 
    <Row> 
    {rendered} 
    </Row> 
    </Grid> 
); 

我可以遍歷我的數組並在控制檯看到元素的數組,但它們都呈現爲空的HTML元素「<foo></foo><bar></bar><baz></baz>」,而不是實際的組成部分。 爲什麼會發生這種情況,更重要的是,如何讓組件呈現?

+0

添加您在問題 –

+0

中試過的代碼。感謝您的期待:-) – brainstormtrooper

+0

什麼是'item.type'? 'item.type'是一個字符串嗎? –

回答

0

您應該使用組件,而不是字符串item.type這樣

import Foo from './Foo'; 
import Bar from './Bar'; 

[ { type: Foo, }, { type: Bar, }, { type: Baz}] 

UPDATE:

如果你沒有事先組件的參考,然後用它你的字符串轉換爲組件映射對象這樣的參考

import Foo from './Foo'; 
import Bar from './Bar'; 

const mapper = { 
    Foo: Foo, 
    Bar: Bar, 
} 

// Then use it like this 

const getItems = this.props.itemslist.map((item, key) => { 
    const Type = mapper[item.type]; 
    rendered.push(<Type data-attributes={attributes} key={key} />); 
}); 
+0

但我不知道要導入什麼,直到我加載配置文件... – brainstormtrooper

+0

@brainstormtrooper我不知道我接到你了。我的意思是,從字符串,你不能渲染組件。如果你沒有組件引用,那麼只需創建一個將你的字符串映射到組件的映射對象。 –

+0

@brainstormtrooper看到這個https://github.com/facebook/react/issues/3365 –

0

第一個錯誤是看看是否有不正確的我們e的.map。請記住,.map遍歷每個數組元素並更改它們。現在,你正在使用它,就好像它是.forEach

您的代碼應該看起來更像是這樣的:

const getItems = this.props.itemslist.map((item, key) => { 
    const TYPE = item.type; 
    return <TYPE data-attributes={attributes} key={key} /> 
}); 
0

可以使用React.createElement與動態名稱創建作出反應的元素。另外請確保導入這些組件。

const rendered = []; 
const getItems = this.props.itemslist.map((item, key) => { 
    const component = React.createElement(item.type, {data-attributes: attributes, key: key}, null); 
    rendered.push(component); 
}); 
return (
    <Grid> 
    <Row> 
    {rendered} 
    </Row> 
    </Grid> 
); 
+0

謝謝。我試過了,但是我得到了相同的結果:-( – brainstormtrooper

+0

你是以大寫字母開頭的字符串,否則它不會被視爲反應組件 –