【发布时间】:2016-10-17 00:24:16
【问题描述】:
通过在头部添加脚本标签可以使用许多Web API:
<html lang="en">
<head>
<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places"></script>
</head>
<body>
<div id="root" style="height: 100%"></div>
</body>
</html>
但是当使用像 React 这样的库和像 ES6 这样的新特性时,这似乎不合适。就像让我们保持模块化一样——导入应该接近使用它的代码。
我们如何在 ES6 文件中做同样的事情?
我想这样获取它:
var request = require('request');
request('https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places', function (error, response, body) {
if (!error && response.statusCode == 200) {
...
}
})
应该如何处理返回的内容?将其附加到头部?
更新:
错误:ReferenceError: google is not defined
我是否在错误的时间加载脚本?
const loadScript = (src) => {
const script = document.createElement("script")
script.type = "text/javascript"
script.src = src
document.getElementsByTagName("head")[0].appendChild(script)
}
class Geosuggest extends React.Component {
constructor(props) {
super(props)
loadScript('https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places')
}
componentWillMount() {
this.autocompleteService = new google.maps.places.AutocompleteService();
}
}
【问题讨论】:
-
你会以完全相同的方式来做,ES6 不会改变在 HTML 中添加脚本的方式。
-
我的意思是在 JS 中做这一切。
-
呃,那你会用JS插入一个脚本标签吗?您无法使用客户端 JS 获取跨域资源,并且在服务器端获取它似乎没有多大意义?你似乎在使用
require,这意味着需要一些 Require.js 的实施? -
所以你想重新发明轮子,因为它“看起来不合适”?这里有解决实际问题吗?
-
' 用 JS 插入一个脚本标签' 说得通,就是漏掉了明显的东西。 Scott,在使用分形项目结构时,将一个组件所需的代码放在该组件目录范围之外的 html 文件中是非常不合适的。