将JS脚本标签添加到React

时间:2019-07-11 03:51:27

标签: javascript html reactjs

我在服务器上有一个script.js文件,该文件使用纯JavaScript(香草)编写,并返回了具有某些功能的HTML表单。 我先通过第一个<script>标签下载它,然后使用script.js中.html文件中第二个<script>标签中的函数,它可以正常工作。但是我不知道如何在React中运行它。我试图这样做,但是没有用。

script.js

var lib = lib || (function() {
  var _args = {};

  return {
    init: function(Args) {
      _args = Args;
    },
    func: function() {
      ...some logic and use document.write
      for render
    }
  }
}())

在HTML中有效

<script src='http://someurl.com/checkout'></script>
<script>
  lib.init(...some args);
  lib.func();
</script>

在React中,它不起作用

import React, {
  Component
} from 'react';
import axios from "axios";

class Checkout extends Component {

  state = {}

  componentDidMount = async() => {
    axios.get("http://someurl.com/checkout")
      .then(res => {
        const scriptInit = document.createElement("script");
        scriptInit.src = "http://someurl.com/checkout";
        // or scriptInit.text = res.data;
        scriptInit.type = "text/javascript";
        scriptInit.async = true;
        const scriptFunc = document.createElement("script");
        scriptFunc.text = "lib.init(...); lib.func();";
        scriptFunc.async = true;
        const script = scriptInit.outerHTML + scriptFunc.outerHTML;
        this.setState({
          script
        });
      })

  }

  render() {
    const __html = this.state.script || "";
    return <div id = "checkout"
    dangerouslySetInnerHTML = {
      {
        __html
      }
    }
    />
  }
}

export default Checkout;

使用所有脚本标签但分辨率为1110 x 0渲染div标签

1 个答案:

答案 0 :(得分:1)

您需要在脚本加载后调用函数。您不需要axios,可以使用onload回调来实现此功能。

componentDidMount(){
 const script = document.createElement("script");
 document.head.appendChild(script);
 script.src = "http://someurl.com/checkout";
 script.async = true;
 script.onload = () => this.runScriptMethods();
}

runScriptMethods(){
  lib.init(...);
  lib.func()
}