如何将加载外部HTML的HTML模板转换为react.js

时间:2019-02-23 14:21:48

标签: javascript reactjs

我正在研究网络项目,我想使用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?

2 个答案:

答案 0 :(得分:2)

有一个npm模块,可将原始HTML转换为反应DOM结构:

html-to-react

它通过解析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 &middot; Second'};
}

function MyComponent() {
  return <div dangerouslySetInnerHTML={createMarkup()} />;
}

注意:@Reggie Snow的上述注释解决方案将增加软件包的大小。

ReactJS文档加载外部HTML: https://reactjs.org/docs/dom-elements.html

请告诉我它是否适合您