谷歌没有在使用 create-react-app 的反应应用程序中定义

Posted

技术标签:

【中文标题】谷歌没有在使用 create-react-app 的反应应用程序中定义【英文标题】:google is not defined in react app using create-react-app 【发布时间】:2017-09-28 14:52:52 【问题描述】:

我使用名为 create-react-app 的 cli 创建了一个 react 应用程序。看起来 Facebook 在底层做了很多事情,比如 webpack 等。但是,我想它也可能有一些限制。我尝试关注this tutorial 来加载谷歌地图 api。而且在调试代码的时候,可以看到google map已经被成功引用了。.

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

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

有什么想法吗?

【问题讨论】:

你的.eslintrc是什么样的? Create React App 不支持自定义 ESLint 配置,所以这个注释在这种情况下不是很相关。 【参考方案1】:

如user guide 中所述,您需要从window 显式读取任何全局变量。把它放在文件的顶部,它就会起作用:

const google = window.google;

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

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

【讨论】:

很高兴知道。感谢回复 我在 Vue.js 和 Nuxt.js 中遇到了同样的问题。你的回答也对我有用。 谢谢,我在使用 react-geosuggest 时遇到了这个问题,你的回答对我有帮助。 我试过这个,但是我得到一个错误,说将导入放在文件的顶部。把它放在导入下面是行不通的。所以我不得不在顶部使用 /* global google */。 嗨,丹,刚才我在您的“用户指南”链接中搜索了 [窗口、全局、显式],但结果为空。有关此信息的信息是否转移到其他地方?【参考方案2】:

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

/*global google*/

【讨论】:

【参考方案3】:

您好,您可以像这样使用withGoogleMap

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

const google = window.google;

class MapComponent extends Component 
....

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

export default withGoogleMap(MapComponent);

【讨论】:

【参考方案4】:

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

window.google = window.google ? window.google : 

const google = window.google = window.google ? window.google : 

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

【讨论】:

是的,只有这个有效,因为我将 window.google 设置为未定义,然后运行时错误【参考方案5】:

.eslintrc.json


    // ...
    "globals": 
     "google": "readonly"
    

【讨论】:

以上是关于谷歌没有在使用 create-react-app 的反应应用程序中定义的主要内容,如果未能解决你的问题,请参考以下文章

没有提供模板。这可能是因为您使用的是过时版本的 create-react-app(NPM 问题)

使用 create-react-app 的多个入口点

如何使用 create-react-app 提供 SSL 证书?

create-react-app里添加less

如何在 create-react-app 中注入没有 REACT_APP 前缀的 dotenv 变量?

React 学习 ---- create-react-app