我认为问题是是否可以同时使用具有两种或多种类型的脚本标记(例如类似type="module, txt/babel"
)。据我所知,答案是否定的。
JonDotsoy 的回答有助于减少React.createElement
一遍又一遍的打字,但即使有这样一个“可变快捷方式”,在使用带有嵌套元素的较大模板时,它也不像 JSX 那样舒服,因为h('div', {}, 'hello!!')...
在这种情况下很难维护。
唯一的办法,我发现巴贝尔,而无需使用任何的构建工具这是... ...一个相当肮脏的黑客使用结合本地浏览器module支持和浏览器的JSX eval
,不应该用于生产的应用程序:
索引.html
<body>
<div id="app"></div>
<!-- Scripts ------- -->
<script src="vendor/js/babel.min.js"></script>
<script src="vendor/js/react.development.js"></script>
<script src="vendor/js/react-dom.development.js"></script>
<script src="app/app.js" type="module"></script>
</body>
应用程序/app.js
import ComponentOne from "./ComponentOne.js";
let template = `
<div>
<h1>Heading</h1>
<hr />
<ComponentOne msg="MsgText-ComponentOne" />
</div>
`;
const App = () => {
return (
eval(Babel.transform(template, { presets: ['es2017', 'react'] }).code)
);
};
ReactDOM.render(
React.createElement(App, null),
document.getElementById("app")
);
应用程序/ComponentOne.js
import ComponentTwo from "./ComponentTwo.js";
let template = `
<div>
<h2>This is ComponentOne</h2>
<p key="2">Property "msg" content: {props.msg}</p>
<ComponentTwo msg="MsgText-ComponentTwo" />
</div>
`;
const ComponentOne = (props) => {
return(
eval(Babel.transform(template, { presets: ['es2017', 'react'] }).code)
);
};
export default ComponentOne;
应用程序/ComponentTwo.js
let template = `
<div>
<h2>This is ComponentTwo</h2>
<p key="2">Property "msg" content: {props.msg}</p>
</div>
`;
const ComponentTwo = (props) => {
return(
eval(Babel.transform(template, { presets: ['es2017', 'react'] }).code)
);
};
export default ComponentTwo;