React Component中的渲染脚本标签

时间:2018-12-16 18:48:02

标签: javascript reactjs jsx

我正在制作一个React应用程序,我只需要在一个组件中运行Javascript脚本,并引用其中一个div

我知道有一些库可以这样做,但是我想知道是否有更直接的方法可以做到这一点。现在,我这样做:

import React, { Component } from "react";
import "../ThisComponent.css";

export default class MyComponent extends Component {
  render() {
    return (
      <div>
        <div id="scriptTarget" />
        <div className="main">
          // Other stuff
        </div>
        <script src="js/myScript.js" />
      </div>
    );
  }
}

但是什么也没发生。脚本存储在public/js/myScript.js中。
谢谢!

3 个答案:

答案 0 :(得分:2)

通过使用dangerouslySetInnerHTML,您可以将所需的任何有效html添加到元素中。

import React, { Component } from "react";
import "../ThisComponent.css";

export default class MyComponent extends Component {
  render() {
    return (
      <div dangerouslySetInnerHTML="<script src='js/myScript.js' />" >
        <div id="scriptTarget" />
        <div className="main">
          // Other stuff
        </div>
      </div>
    );
  }
}

我应该提一下,正如属性名称所暗示的那样,强烈建议不要使用它。

答案 1 :(得分:1)

我最终通过在渲染组件之前添加了componentDidMount函数来解决了这个问题。像这样:

import React, { Component } from "react";
import "../ThisComponent.css";

export default class MyComponent extends Component {
  componentDidMount() {
    const script = document.createElement("script");

    script.src = "js/myScript.js";
    script.async = true;

    document.body.appendChild(script);
  }

  render() {
    return (
      <div>
        <div id="scriptTarget" />
        <div className="main">
          // Other stuff
        </div>
      </div>
    );
  }
}

如果有人有更好的解决方案,请随时分享。我会通知您进一步的建议。

答案 2 :(得分:0)

export default class MyComponent extends Component {
    componentDidMount() {
        const script = document.createElement("script");
        script.innerHTML = "window.onload = function() {\n" +
            ...
            "}"
        script.async = true;
        document.body.appendChild(script);
    }

    render() {
        return (
            <div>
            </div>
        );
    }
}