javascript React组件中的渲染脚本标记

um6iljoc  于 2023-01-24  发布在  Java
关注(0)|答案(4)|浏览(125)

我正在制作一个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中。
谢谢!

doinxwow

doinxwow1#

我最终通过在呈现组件之前添加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>
    );
  }
}

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

zbsbpyhn

zbsbpyhn2#

通过使用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>
    );
  }
}

我应该提到的是,正如属性名称所暗示的那样,强烈不鼓励使用它。

yqyhoc1h

yqyhoc1h3#

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>
        );
    }
}
km0tfn4u

km0tfn4u4#

你也可以使用一个外部组件“ Helm ”来实现脚本标签,你也可以在这个组件的帮助下使用链接标签, meta标签,样式标签等。

相关问题