google 未在使用 create-react-app 的 react 应用程序中定义

IT技术 google-maps reactjs webpack create-react-app
2021-03-29 09:14:27

我使用名为 create-react-app 的 cli 创建了一个 React 应用程序。看起来 Facebook 在底层做了很多事情,比如 webpack 等。但是,我猜它可能也有一些限制。我尝试按照本教程加载谷歌地图 api。当我调试我的代码时,我可以看到谷歌地图已被成功引用。在此处输入图片说明.

但是然后我单击播放并让应用程序完成运行。我从 webpackHotDevClient.js 得到 google is not defined 错误,我的应用程序崩溃了。

在此处输入图片说明

在此处输入图片说明

由于 webpack 即时编译文件,我认为通过 https 加载谷歌地图有问题吗?

有什么想法吗?

5个回答

正如用户指南中提到的,您需要从window. 把它放在文件的顶部,它会起作用:

const google = window.google;

我们强制这样做的原因是因为人们通常会误解局部变量、导入module和全局变量之间的区别,因此我们希望在使用全局变量时始终在代码中明确说明。

顺便说一下,这与 Webpack 或 HTTPS 无关。您看到这一点是因为我们使用了禁止未知全局变量的 linting 规则。

嗨,丹,刚才我在您的“用户指南”链接中搜索了 [window、global、explicit],结果是空的。有关此信息的信息是否已转移到其他地方?
2021-05-25 09:14:27
我在 Vue.js 和 Nuxt.js 中遇到了同样的问题。你的回答也对我有用。
2021-06-14 09:14:27
谢谢,我在使用 react-geosuggest 时遇到了问题,您的回答对我有所帮助。
2021-06-14 09:14:27
我试过这个,但后来我收到一个错误,说将导入放在文件的顶部。把它放在进口下面是行不通的。所以我不得不在顶部使用 /* global google */ 。
2021-06-14 09:14:27
很高兴知道。谢谢回复
2021-06-18 09:14:27

我认为当您从 html 脚本导入谷歌地图时,谷歌变量已经可用。此错误由 Eslint 引起,您可以尝试将以下行添加到文件顶部以禁用 ESlint

/*global google*/

嗨,你可以这样使用withGoogleMap

import { withGoogleMap, GoogleMap, Marker, InfoWindow } from "react-google-maps";

const google = window.google;

class MapComponent extends Component {
....

<GoogleMap>
.....
.....
.....
</GoogleMap>

export default withGoogleMap(MapComponent);

我有一个更好的解决方案然后@Dan 你可以这样做

window.google = window.google ? window.google : {}

或者

const google = window.google = window.google ? window.google : {}

如果google可用,则没有问题,如果不可用,则在加载脚本之前将分配空。

是的,只有这个有效,因为我将 window.google 设为未定义,然后运行时错误
2021-06-05 09:14:27

.eslintrc.json

{
    // ...
    "globals": {
     "google": "readonly"
    }
}