Create-react-appというcliを使用して、reactアプリを作成します。 Facebookはwebpackなど、その下で多くのことを行ったように見えますが、いくつかの制限があるかもしれません。私は このチュートリアル に従ってGoogleマップAPIをロードしようとします。そして、コードをデバッグすると、Googleマップが正常に参照されていることがわかります。 。
ただし、[再生]をクリックして、アプリケーションの実行を終了します。 webpackHotDevClient.jsからgoogle is not definedエラーが発生し、アプリケーションがクラッシュしました。
Webpackはオンザフライでファイルをコンパイルするため、https経由でGoogleマップをロードするのに問題があると思いますか?
何かご意見は?
ユーザーガイド で述べたように、window
からグローバル変数を明示的に読み取る必要があります。これをファイルの先頭に置くと動作します:
const google = window.google;
これを実施する理由は、人々が一般的にローカル変数、インポートされたモジュール、グローバル変数の違いを誤解しているためです。
ところで、これはWebpackやHTTPSとは関係ありません。これは、未知のグローバル変数を禁止するリンティング規則を使用しているためです。
Htmlのスクリプトからgoogleマップをインポートすると、google変数は既に使用可能になっていると思います。このエラーは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 : {}
OR
const google = window.google = window.google ? window.google : {}
google
が使用可能な場合、スクリプトがロードされるまで、問題がなければ空が割り当てられます。