【问题标题】:How to convert html template which load external html to reactjs如何将加载外部html的html模板转换为reactjs
【发布时间】:2019-07-17 11:05:15
【问题描述】:

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

【问题讨论】:

  • 您正在尝试将外部脚本动态加载到您的页面吗?

标签: javascript reactjs


【解决方案1】:

有一个 npm 模块可以将原始 HTML 转换为 react 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 之外最简单的实现方式。

【讨论】:

    【解决方案2】:

    在 ReactJS 中无需使用第三方插件来渲染外部 HTML。

    可以通过以下方式实现

    function createMarkup() {
      return {__html: 'First &middot; Second'};
    }
    
    function MyComponent() {
      return <div dangerouslySetInnerHTML={createMarkup()} />;
    }
    

    注意:@Reggie Snow 的上述评论解决方案将增加您的捆绑包大小。

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

    如果它适合你,请告诉我

    【讨论】:

      猜你喜欢
      • 2019-11-11
      • 1970-01-01
      • 2019-07-07
      • 1970-01-01
      • 2017-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-24
      相关资源
      最近更新 更多