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

IT技术 javascript reactjs
2021-02-01 14:52:38

我想添加到我的react组件中

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

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

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

6个回答

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

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

  document.body.appendChild(script);
}

它应该附加到window.

 scriptLoaded() {
   window.A.sort();
 }

或者

scriptLoaded() {
  A.sort();
}
@格罗弗。A 是一个加载的module,它将自身附加到 window 对象。A 仅用于说明目的。
2021-03-16 14:52:38
我不确定这是在 ReactJS 中加载外部脚本的最佳方式吗?您是否测试了使用 CDN 将脚本添加到 index.html 或执行您在组件中所做的操作的性能?
2021-03-23 14:52:38
@Flow 为我调用了脚本加载的方法,但是我无法调用 js 文件中的方法,并且它在窗口中也不可用
2021-03-25 14:52:38
window.A参考什么每次我在我的loaded函数中调用它时,都会出现运行时错误Cannot read property 'sort' of undefined
2021-03-26 14:52:38
你拯救了这一天!
2021-03-30 14:52:38

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

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

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

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

window.$("#btn1").click(function(){
  alert("Text: " + $("#test").text());
});
为什么要引用 jQuery?
2021-03-17 14:52:38
啊! 我明白了,抱歉,我没有得到你的上下文。
2021-03-18 14:52:38
这对我不利,因为我想动态添加它而不是硬编码它..所以我必须在组件中使用它......
2021-04-03 14:52:38
如果您的外部脚本需要包含在标题中,您可以使用 React Helmet 动态管理进入 index.html 页面标题的内容github.com/nfl/react-helmet
2021-04-04 14:52:38
我引用 jQuery 作为引用外部 JS 的示例,以展示如何包含和使用 JS 文件
2021-04-10 14:52:38

你可以使用 React Helmet npm

第 1 步: npm i react-helmet

第2步 :

<Helmet>
    <script src="/path/to/resource.js" type="text/javascript" />
</Helmet>

有时我们需要使用外部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);

  }

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

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

好的,react-load-script 似乎是可行的,但是在我加载它之后,如果我使用 react-load-script 加载它,我该如何使用脚本中的函数?如前所述,例如使用脚本中的函数 A.sort() ...
2021-04-07 14:52:38