2015-11-30 24 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

没问题,我希望有一个安全的方法来转换一个字符串,但病人将其标记为正确,因为它可能是最好的方法 –