开发者问题收集

react-google-maps - 未捕获的 ReferenceError:google 未定义

2018-11-06
10732

我是 ReactJS 新手,目前正在为一个项目使用 react-google-maps,我正在使用 FourSquare API 显示一些地点,有一个方向按钮,用于显示从用户当前位置到目的地的方向。

这是 Meeting.js

/* eslint-disable no-undef */
/* global google */
import React, { Component } from 'react';
import Map from '../../Component/Map';
import MapAPI from '../../api/GoogleMap';

class Meeting extends Component {
// constructor and other stuff...

getDirections = () => {
const DirectionsService = new google.maps.DirectionsService();

DirectionsService.route(
  {
    destination: new google.maps.LatLng(24.8861479, 67.0595196),
    origin: new google.maps.LatLng(24.8812296, 67.0727269),
    travelMode: google.maps.TravelMode.DRIVING,
  },
  (result, status) => {
    if (status === google.maps.DirectionsStatus.OK) {
      this.setState({
        directions: result,
        mapLoaded: true,
        mapVisible: true,
      });
    } else {
      alert("Sorry! Can't calculate directions!");
    }
  },
);
};

render() {
const { coords, directions, mapVisible } = this.state;

return (
  <div className="section">
    {mapVisible && (
      <Map
        coords={coords}
        dragged={this.dragged}
        isMarkerShown
        directions={directions}
        googleMapURL={MapAPI}
        loadingElement={<div style={{ height: `100%` }} />}
        containerElement={<div style={{ height: `350px` }} />}
        mapElement={<div style={{ height: `100%` }} />}
      />
    )}
  </div>
);
}
}

export default Meeting;

这是 Map.js

import React from 'react';
import {
  withScriptjs,
  withGoogleMap,
  GoogleMap,
  Marker,
  DirectionsRenderer,
} from 'react-google-maps';

const Map = withScriptjs(
  withGoogleMap(props => (
    <GoogleMap
      defaultZoom={14}
      defaultCenter={{
        lat: props.coords.latitude,
        lng: props.coords.longitude,
      }}
      center={{ lat: props.coords.latitude, lng: props.coords.longitude }}
    >
      {props.isMarkerShown && (
        <Marker
          draggable={props.draggable || false}
          onDragEnd={e => props.dragged(e)}
          position={{ lat: props.coords.latitude, lng: props.coords.longitude }}
        />
      )}

      {props.directions && <DirectionsRenderer directions={props.directions} />}
    </GoogleMap>
  )),
);

export default Map;

在按钮上调用了 getDirections 函数,它既不适用于 componentDidMount,也不适用于按钮单击,在这两种情况下我都得到了相同的错误。

我认为这是因为 Google 的异步加载,但找不到解决这个问题的方法,我看到有人问同样的问题,但没有令人满意的答案。 任何帮助都将不胜感激。

1个回答

这是因为您在 Map.js 中导入了 react-google-maps ,并且在 Meeting.js 中调用了 google ,google 在您的 Map.js 中可用 - 尝试在其中使用它,您就可以开始了!

https://codesandbox.io/embed/nkykvozl34

更新:

react-google-maps 的配置已更新: https://tomchentw.github.io/react-google-maps/#usage--configuration

Muhammad Ovi
2018-11-08