简单地将 React 组件添加到 HTML 代码中是不可能的,因为 <MyComponent></MyComponent> 根本不是 HTML,它是 JSX。
说明
JSX 是一种可以“转译”为 Javascript 的特殊语法,所以本质上<MyComponent></MyComponent> 最终会变成 Javascript 代码,显然不能只放入 HTML 代码中。
然后从 JSX 生成的 Javascript 代码将被执行并生成实际的 HTML 代码。
可以在 JSX 中添加 HTML 标签,因为 HTML 可以被解释为 JSX(也可以转译为 Javascript),例如:
class MyComponent extends React.Component {
render(){
return <div>
<h2>HTML in JSX works</h2>
<SomeOtherJsxComponent />
</div>;
}
}
但是不可能将 JSX 添加到 HTML 中,例如:
<body>
<div>
<JsxInHtmlDoesNotWork />
</div>
</body>
React 是 Javascript,因此将 Javascript 功能添加到 HTML 所需的一切也适用于将 React 添加到 HTML。
(最近的)解
所以你可以做的就是将你现有的 HTML 移动到一些 JSX 包装器中(这可能不是你想要做的,因为这朝着创建 SPA 的方向发展,这是你不想要的),例如:
<html><head>
<title>My web site</title>
</head><body>
<h1>Some HTML title</h1>
<p>Some HTML content.</p>
<!-- add a container, where you want to include react components -->
<div id="injected-react-content"></div>
<!-- import the react libraray -->
<script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<!-- setup react root component other components -->
<script type="text/babel">
class RootComponent extends React.Component {
render(){
return <div>
<MyComponent />
</div>;
}
}
class MyComponent extends React.Component {
render(){
return (<div>This is a simple component</div>);
}
}
const domContainer = document.querySelector('#injected-react-content');
ReactDOM.render( React.createElement(RootComponent), domContainer );
</script>
</body></html>
有关如何将 React 添加到现有 HTML 网站的更多背景信息,请参阅例如: