我正在研究网络项目,我想使用reactjs,我正在使用的模板调用加载外部html文件的外部js文件。例如
<header role="banner">
<script type="text/javascript" src="/remote/webassets/js/header-footer.js"></script>
</header>
我想将上述内容转换为如下所示的反应
import React, {
Component,
} from 'react';
// loads header and footer
class HF extends Component {
render() {
return (
<header role="banner">
<script type="text/javascript" src="/remote/webassets/js/header-footer.js"></script>
</header>
);
}
}
export default HF;
我的模板
<body>
<header role="banner">
<!-- loads header and footer -->
<script type="text/javascript" src="/remote/webassets/js/header-footer.js"></script>
</header>
<div class="sidebar">
<!-- loads sidebar menu -->
<script type="text/javascript" src="/remote/webassets/js/sidebar.js"></script>
</div>
<main>
<!-- content -->
</main>
<footer class="footer"></footer>
<script>
$(window).load(function() {
$('[data-class=lazyload]').each(function() {
//* set the img src from data-src
$(this).attr('href', $(this).attr('data-href'));
});
$('.lazyload').each(function() {
//* set the img src from data-src
$(this).attr('src', $(this).attr('data-src'));
});
});
const loadScriptAsync = () {...};
window.onload = loadScriptAsync
(function() {
'use strict';
window.MyEvenArray = function(callback) {...};
window.ErrorEvents = new window.MyEvenArray();
window.onerror = function(msg, url, line, col, error) {
...
window.ErrorEvents.push(d);
};
})();
</script>
</body>
是否有更好的方法将其转换为反应?还是我应该坚持使用纯HTML?
答案 0 :(得分:2)
有一个npm模块,可将原始HTML转换为反应DOM结构:
它通过解析DOM元素并将其转换为具有一个父代的React树来工作。这是一个基本示例:
var ReactDOMServer = require('react-dom/server');
var HtmlToReactParser = require('html-to-react').Parser;
var htmlInput = '<div><h1>Title</h1><p>HTML contained within</p>
</div>';
var htmlToReactParser = new HtmlToReactParser();
var reactElement = htmlToReactParser.parse(htmlInput);
var reactHtml = ReactDOMServer.renderToStaticMarkup(reactElement);
assert.equal(reactHtml, htmlInput); // true
除了使用UNICODE,这似乎是最简单的实现方式。
答案 1 :(得分:0)
无需使用第三方插件即可在ReactJS中呈现外部HTML。
您可以通过以下方式实现
function createMarkup() {
return {__html: 'First · Second'};
}
function MyComponent() {
return <div dangerouslySetInnerHTML={createMarkup()} />;
}
注意:@Reggie Snow的上述注释解决方案将增加软件包的大小。
ReactJS文档加载外部HTML: https://reactjs.org/docs/dom-elements.html
请告诉我它是否适合您