我正在制作一个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
中。
谢谢!
答案 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>
);
}
}