簡體   English   中英

將JS腳本標簽添加到React

[英]Adding JS script tag to React

我在服務器上有一個script.js文件,該文件使用純javascript(香草)編寫,並返回了具有某些功能的HTML表單。 我通過第一個<script>標記下載了它,並使用了.html文件中第二個<script>標記中的script.js中的函數,並且可以正常工作。 但是我不知道如何在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標簽

您需要在腳本加載后調用這些函數。您不需要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()
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM