Я думаю, что вопрос был в том, возможно ли использовать тег script с двумя или более типами одновременно (например, что-то вроде type="module, txt/babel"
). Насколько я знаю, ответ НЕТ.
Ответ JonDotsoy помогает снова и снова сокращать ввод React.createElement
, но даже при таком «быстром сокращении» это не так удобно, как JSX, при использовании больших шаблонов с вложенными элементами, потому что h('div', {}, 'hello!!')...
трудно поддерживать в таких случаях.
Единственный способ объединить поддержку встроенного модуля браузера и встроенного браузера Babel для JSX без использования какого-либо инструмента для сборки - это ... довольно грязный хак, использующий eval
и не должен использоваться для рабочих приложений:
index.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;