В React Google Maps, получить «Google не определен», даже если компонент обернут с помощью сценария JavaScript? - PullRequest
0 голосов
/ 02 сентября 2018

Я пытаюсь воспроизвести пример в https://tomchentw.github.io/react-google-maps/#groundoverlay в проекте React, созданном с create-react-app; что у меня до сих пор на https://github.com/khpeek/trailmaps.

В src/components у меня есть groundOverlay.js следующим образом:

import React from 'react';

const { compose } = require("recompose");
const {
  withScriptjs,
  withGoogleMap,
  GoogleMap,
  GroundOverlay,
} = require("react-google-maps");

const MapWithGroundOverlay = compose(
  withScriptjs,
  withGoogleMap
)(props =>
  <GoogleMap
    defaultZoom={12}
    defaultCenter={{lat: 40.740, lng: -74.18}}
  >
    <GroundOverlay
      defaultUrl="https://www.lib.utexas.edu/maps/historical/newark_nj_1922.jpg"
      defaultBounds={new google.maps.LatLngBounds(
        new google.maps.LatLng(40.712216, -74.22655),
        new google.maps.LatLng(40.773941, -74.12544)
      )}
      defaultOpacity={.5}
    />
  </GoogleMap>
);

Тогда, в App.js, у меня есть

import React, { Component } from 'react';
import './App.css';
import MapWithAnOverlayView from './components/overlayView';
import MapWithGroundOverlay from './components/groundOverlay';

class App extends Component {
  render() {
    return (
      <div className="App">
        <header className="App-header">
          <h1 className="App-title">Custom Overlay</h1>
        </header>
        <MapWithGroundOverlay
          googleMapURL="https://maps.googleapis.com/maps/api/js?key=AIzaSyBimnrhiugaGSNN8WnsjpzMNJcrH_T60GI&v=3.exp&libraries=geometry,drawing,places"
          loadingElement={<div style={{ height: `100%` }} />}
          containerElement={<div style={{ height: `400px` }} />}
          mapElement={<div style={{ height: `100%` }} />}
        />
      </div>
    );
  }
}

export default App;

Однако я получаю следующую ошибку:

enter image description here

Есть идеи, почему это не работает? Разве это не правильный способ сделать это?

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Для eslint необходимо определить, что google является глобальной переменной, такой как

/* global google */

Вы можете поместить это вверху файла, где вы используете

defaultBounds={new google.maps.LatLngBounds(
    new google.maps.LatLng(40.712216, -74.22655),
    new google.maps.LatLng(40.773941, -74.12544)
)}

Чтобы ваш код работал, вам также необходимо правильно экспортировать компонент из файла groundOverlay.js, например:

/* global google */
import React from 'react';

const { compose } = require("recompose");
const {
  withScriptjs,
  withGoogleMap,
  GoogleMap,
  GroundOverlay,
} = require("react-google-maps");

const MapWithGroundOverlay = compose(
  withScriptjs,
  withGoogleMap
)(props =>
  <GoogleMap
    defaultZoom={12}
    defaultCenter={{lat: 40.740, lng: -74.18}}
  >
    <GroundOverlay
      defaultUrl="https://www.lib.utexas.edu/maps/historical/newark_nj_1922.jpg"
      defaultBounds={new google.maps.LatLngBounds(
        new google.maps.LatLng(40.712216, -74.22655),
        new google.maps.LatLng(40.773941, -74.12544)
      )}
      defaultOpacity={.5}
    />
  </GoogleMap>
);

export default MapWithGroundOverlay;

Когда вы делаете это, оно должно работать, экран ниже.

enter image description here

Я создам PR для вашего репо, чтобы вы могли объединить его и продолжить работу.

Создан запрос на извлечение: https://github.com/khpeek/trailmaps/pull/1

0 голосов
/ 02 сентября 2018

попробуйте использовать declare var google; до @ Component

Пример:

import React, { Component } from 'react';
import './App.css';
import MapWithAnOverlayView from './components/overlayView';
import MapWithGroundOverlay from './components/groundOverlay';

declare var google;

class App extends Component {

}
...