代码之家  ›  专栏  ›  技术社区  ›  Dynalon

如何直接使用ReactDOM渲染React组件(ES6 API)?

  •  8
  • Dynalon  · 技术社区  · 8 年前

    我正在使用 ES6 classes API of React (通过使用TypeScript),并希望呈现类型为 React.Component 使用 ReactDOM.render() .

    以下代码有效:

    class MyComponentProps {
        someMember: string;
    }
    
    class MyComponent extends React.Component<MyComponentProps, {}> {
        constructor(initialProps: MyComponentProps) {
            super(initialProps);
        }
    }
    
    let rootNode = document.getElementById('root');
    ReactDOM.render(
        <MyComponent someMember="abcdef" />,
        rootNode
    )
    

    现在,给定中构造函数的显式类型 react.d.ts ,我假设我可以传递一个用初始属性填充的MyCustomProps对象的实例(如上面的代码所做的)。但是,如何在没有JSX/TSX语法的情况下直接呈现组件?

    以下操作不起作用:

    ReactDOM.render(new MyComponent(new MyComponentProps()), rootNode);
    

    我知道我可以使用JSX语法作为解决方法,但作为我的 MyCustomProps 对象相当大,我不想重复 我的自定义属性 对象

    1 回复  |  直到 7 年前
        1
  •  15
  •   WitVault    7 年前

    你应该使用 React.createElement . 反应创建元素 采用标记名或组件、属性对象和可变数量的可选子参数。 例如。

    class App extends React.Component {
      render(){
        return (
    
          <div><h1>Welcome to React</h1></div>
        );
      }
    }
    

    使用 jsx 可以这样呈现

    ReactDOM.render(<App />, document.getElementById('app'));
    

    以另一种方式(没有 jsx语言 )

    ReactDOM.render(React.createElement(App, null), document.getElementById('app'));
    

    正在运行的示例-

    class App extends React.Component {
      render(){
        return (
          <div><h1>Welcome to React</h1></div>
        );
      }
    }
    
    ReactDOM.render(React.createElement(App, null), document.getElementById('app'));
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
    
    <div id="app">
    </div>