使用其名称反映渲染组件

rpe*_*ayr 13 javascript reactjs react-jsx

我正在试验React.js,它工作得非常好.我想知道是否有可能将类注入其他类,如下所示:

var Container = React.createClass({
    render: function() {
      <{this.props.implComponent}/>
    }
});
Run Code Online (Sandbox Code Playgroud)

假设implComponent已经像这样传递:

React.render(
  <Container implComponent="somePredefinedVariable" />,
   document.getElementById('content')
);
Run Code Online (Sandbox Code Playgroud)

由于语法错误,这不起作用.我很容易理解为什么.

换句话说,我想根据名称将类注入其他类.这可能吗?我怎样才能做到这一点?

Bri*_*and 18

你很亲密 你需要自己传递组件类(不是字符串),然后因为标签语法已经采用了一个变量,你就摆脱了{}s.另外,不要忘记从渲染中返回节点.

var Container = React.createClass({
    render: function() {
        return <this.props.implComponent />
    }
});

React.render(
  <Container implComponent={SomePredefinedVariable} />,
   document.getElementById('content')
);
Run Code Online (Sandbox Code Playgroud)

如果要传递基本dom组件,则使用字符串

如果你考虑转换结果,这是有道理的

var Container = React.createClass({displayName: "Container",
    render: function() {
      return React.createElement(this.props.implComponent, null)
    }
});

ReactDOM.render(
  React.createElement(Container, {implComponent: SomePredefinedVariable}),
   document.getElementById('content')
);
Run Code Online (Sandbox Code Playgroud)
ReactDOM.render(
  React.createElement(Container, {implComponent: "div"}),
   document.getElementById('content')
);
Run Code Online (Sandbox Code Playgroud)