【发布时间】:2017-03-17 00:25:01
【问题描述】:
我想从 CDN 加载脚本,然后在 React 中执行该脚本公开的函数:
componentWillMount() {
console.log('componentWillMount is called');
const script = document.createElement('script');
script.src = 'https://foo.azurewebsites.net/foo.js';
document.body.appendChild(script);
}
componentDidMount() {
console.log('componentDidMount is called');
window.foo.render({
formId: '77fd8848-791a-4f13-9c82-d24f9290edd7',
}, '#container');
}
render() {
console.log('render is called');
return (
<div id="container"></div>
);
}
脚本有时需要一些时间来加载(通常是第一次),当 componentDidMount() 被称为“foo”时不可用,我收到如下错误:
TypeError: 无法读取未定义的属性“render”
如何确保脚本加载成功后调用componentDidMount()?
【问题讨论】:
-
如何加载脚本?
<script>标签? -
@bejado 是的,仅针对此组件,因为我们需要它来自 cdn
-
把你的应用和React脚本标签放在CDN脚本标签下面,这样浏览器就强制先加载
render函数。 -
在将脚本附加到文档正文时看起来有一个
onload功能,因此您可以在组件的状态中使用布尔值来跟踪加载状态,并在onload函数将状态的“已加载”布尔值设置为 true。然后在您的渲染函数中检查状态值。这是一个谷歌搜索:google.com.au/…* -
我已将其移至 index.html 以更安全。
标签: javascript reactjs react-redux