如何使用添加的外部脚本来响应JS?

met*_*ice 9 javascript reactjs

我想添加到我的反应组件

<script>http://xxx.xxx/XX.js</script>

我知道我可以简单地使用JSX添加它,但我不知道如何使用它,

例如,此脚本具有一个称为A.Sort()的函数,如何调用它并从组件中使用它?

Bil*_*lal 19

您可以在 /public/index.html 中包含该标签,然后像在普通 JS 代码中一样使用该脚本,如果您想使用 jQuery,请参考以下示例:

在您的 public/index.html 中包含以下内容:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

然后在任何地方您都可以像往常一样使用 jQuery 功能:

window.$("#btn1").click(function(){
  alert("Text: " + $("#test").text());
});
Run Code Online (Sandbox Code Playgroud)

  • 为什么要引用 jQuery? (4认同)
  • 我引用了 jQuery 作为引用外部 JS 的示例来展示如何包含和使用 JS 文件 (4认同)

Rah*_*rma 13

您可以使用 React Helmet npm

第 1 步:npm 我的反应头盔

第2步 :

<Helmet>
    <script src="/path/to/resource.js" type="text/javascript" />
</Helmet>
Run Code Online (Sandbox Code Playgroud)


Flo*_*low 11

您可以异步加载脚本并在加载时访问它。

componentDidMount() {
  const script = document.createElement("script");
  script.src = "/static/libs/your_script.js";
  script.async = true;
  script.onload = () => this.scriptLoaded();

  document.body.appendChild(script);
}
Run Code Online (Sandbox Code Playgroud)

它应该附加到window

 scriptLoaded() {
   window.A.sort();
 }
Run Code Online (Sandbox Code Playgroud)

要么

scriptLoaded() {
  A.sort();
}
Run Code Online (Sandbox Code Playgroud)

  • “window.A”指的是什么?每次我在“已加载”函数中调用它时,都会收到运行时错误“无法读取未定义的属性“排序”” (2认同)

keu*_*eul 5

您可以通过添加所需的脚本来修改您的 index.html 文件(如果您正在使用)。

或者,如果你不能编辑它或者你没有使用它,有一堆附加组件可以解决这个问题,例如react-load-script

  • 好的,react-load-script 似乎是可行的,但是在我加载它之后,如果我使用 react-load-script 加载它,我如何使用脚本中的函数?如前所述,例如使用脚本中的函数 A.sort() ... (2认同)

Han*_*oh. 5

有时我们需要使用外部js库,这种情况下我们需要在组件中插入script标签,但是在react中我们使用的是jsx,所以我们不能像在HTML中添加那样直接添加script标签。

在本例中,我们将看到如何将外部脚本文件加载到头部、主体元素或组件中。

componentDidMount() {
    const script = document.createElement("script");
    script.async = true;
    script.src = "https://some-scripturl.js";
    script.onload = () => this.scriptLoaded();



    //For head
    document.head.appendChild(script);

    // For body
    document.body.appendChild(script);

    // For component
    this.div.appendChild(script);

  }
Run Code Online (Sandbox Code Playgroud)