javascript - 用字符串 react native 创建元素

标签 javascript reactjs eval ecmascript-6 react-native

我看到很多人在 React native 中创建类似于下面的路由映射:

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}));

这在 React Native 中不起作用,因为显然“字符串不允许作为 React Native 中的第一个参数,因为它们应该用于常规 React 中的 html 标签。”

那么如何做到这一点呢?如果我提供一个 ReactClass 作为第一个参数,或者使用 eval(route.id)(但我知道这可能很危险),我就可以正常工作。

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

最佳答案

您可以设置一个允许的组件命名空间:

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

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

关于javascript - 用字符串 react native 创建元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34002382/

相关文章:

javascript - 使用 eval 从字符串创建函数的不同方法

bash - eval 和反引号(反撇号)之间的区别

javascript - 如何分解这段代码以减少重复(应该这样做)?

javascript - 未处理的拒绝(TypeError): this. setState 不是函数

reactjs - 运行 Electron+React 应用程序时遇到问题

javascript - 上下文 API,如何不使用类?

asp.net - 如何在代码隐藏中调用 Eval?

javascript - 每次单击按钮时都进行相同的转换

javascript - 在新窗口中显示文件

javascript - innerHTML 似乎是唯一好的解决方案