2016-04-26 101 views
0

我有react components陣列,我試圖將它們輸出:動態呈現組件在反應V15

this.props.data

  [ 
       { 
        key: 1, 
        element: 'input', 
        type: 'text', 
        placeholder: 'Jamie is Sex' 
       }, 
       { 
        key: 2, 
        element: 'input', 
        type: 'text', 
        placeholder: 'Jamie is Not Sex' 
       } 
      ] 

input.component.js

import React from 'react'; 

const input = React.createClass({ 
    render() { 
    return (
     <input type="text" /> 
    ); 
    } 
}); 

export default input; 

import components.js

enter image description here

動態代碼

import components from '../../componets'; 
render() { 
    return (
     <form action=""> 
      {this.props.data.map((item, index) => <{components[item.element]} key={index} data={item}/>)} 
     </form> 
     //{components[item.element]} which would reference 'input' from components.js 
    ); 
} 

輸出

bundle.js:33283 Uncaught Error: Cannot find module "../components/Form/Form.component.js"webpackMissingModule @ bundle.js:33283(anonymous function) @ bundle.js:33283__webpack_require__ @ bundle.js:20(anonymous function) @ bundle.js:32763__webpack_require__ @ bundle.js:20(anonymous function) @ bundle.js:7464__webpack_require__ @ bundle.js:20(anonymous function) @ bundle.js:48__webpack_require__ @ bundle.js:20(anonymous function) @ bundle.js:40(anonymous function) @ bundle.js:43 
bundle.js:99 [WDS] Errors while compiling. 
+0

haha​​h我剛看到我自己的佔位符文本,我寫了2小時前,仍然讓我發笑。哦,我生活在一個可怕的生活中:'( –

+0

我相信在這種情況下,您會希望使用React.createElement(組件[item.element],) 來動態創建組件 – Enjayy

+0

事情是''組件[item.elemet ]'引用我的反應組件,它是使用'const input = React.createClass({'所以我不是那麼正確? –

回答

0

實際上你需要通過React.createElement()創建元素,JSX被transpiled這個語法,但動態元素不會被轉換。

我還建議您將映射移出返回值,將其映射到變量上,您也可以檢查數據的有效性。東西有點這樣

render() { 
    let elems = null; 
    let {data} = this.props; 
    if(data.length > 0){ 
     elems = data.map((item, index) => { 
      if(components[item.element]){ 
       return React.createElement(components[item.element], { key: index, data: item }) 
      else { 
       return null 
      } 
     }); 
    } 
    return (
     <form action=""> 
      {elems} 
     </form> 
    ); 
} 
+0

終於回來的項目:)好吧,所以至少我們得到的地方:'bundle.js:8493警告:React.createElement:類型不應該爲空,未定義,布爾值或數字。它應該是一個字符串(用於DOM元素)或ReactClass(用於複合組件)。檢查'form'的渲染方法.'我將播放並確保所有文件名都是正確的 –

+0

確實,我的文件沒有輸出到頂層,所以我需要:'components [item.element] .default'Cheers尋求幫助。原來我寫的代碼沒有錯 –