2015-11-30 25 views
2

創建元素我看到很多人在創造一個路由映射陣營本土類似於下面:反應過來本地用繩子

if (route.id === 'Blah') { 
    return (<Blah prop1={this.method} prop2={this.other method} />); 
} else if (route.id === 'OtherView') { 
    return (<OtherView prop1={this.method} />); 
} 

這很快會成爲很多行代碼,我想這樣做這樣的:

return (React.createElement(route.id, {propsToPass})); 

這不起作用在本地做出反應顯然是爲「字符串不允許作爲第一個參數本地做出反應,因爲這些是爲了用於HTML標籤規則做出反應。」

那麼這怎麼做呢?如果我將ReactClass作爲第一個參數提供,或者使用eval(route.id)(但我知道這可能很危險),我就可以使用它了。

如何使用字符串創建React Native元素?

+0

似乎並非是一個有效的JS。 –

+0

如果您在第一個代碼片段中的條件中討論JSX組件,那是因爲它沒有被編譯成JS,這是React的工作方式 –

回答

2

你可以設置允許的成分命名空間:

var routeComponents = { 
    "Blah": Blah, 
    "OtherView": OtherView 
} 

if(routeComponents[route.id]) { 
    return React.createElement(routeComponents[route.id], {propsToPass}); 
} else { 
    // Error 
} 
+0

我喜歡routeComponents []的想法,我沒有看到這個[route.id]如何工作......你能解釋一下嗎? –

+0

想過之後,這[route.id]是不是你可以做的事情,所以我已經從我的答案中刪除了它。 –

+0

沒問題,我希望有一個安全的方法來轉換一個字符串,但病人將其標記爲正確,因爲它可能是最好的方法 –