我有一个使用“google-maps-react”模块有两个版本的地图的网络应用程序。
所有代码都将在下面提供。
有两个版本(每个版本都在一个单独的 .js 文件中)的意义在于,我想让一个页面像往常一样显示地图,并显示所有标记(也使用位置库)和另一个使用谷歌绘图管理器的页面,没有标记,这允许您放置新的标记或多边形,这些标记或多边形在发送到我的服务器后将在完整地图(第一页)中可用。
现在我的问题是每次我在第一页并转到第二页时,几秒钟后应用程序因“google.maps.drawing”而崩溃是未定义的。但是当我在第二页上启动应用程序时,无论我切换多少次页面,它都不会崩溃。
我不知道为什么会发生这种情况,但我认为它与异步事件有关(???)。
有人能告诉我为什么会发生这种情况以及如何解决吗?
PS:如果有人有更好的方法/想法来做这些页面,请告诉我。
代码时间:
带有绘图管理器的地图:
/* global google */
import React from 'react';
import { Map, InfoWindow, GoogleApiWrapper } from 'google-maps-react';
class DrawingMap extends React.Component {
constructor(props) {
super(props);
this.initMap = this.initMap.bind(this);
this.state = {
...
}
}
initMap(mapProps, map) {
var self = this;
const {google} = mapProps;
const drawingManager = new google.maps.drawing.DrawingManager({
drawingMode: null,
drawingControl: false,
drawingControlOptions: {
position: google.maps.ControlPosition.TOP_CENTER,
drawingModes: [
google.maps.drawing.OverlayType.MARKER,
google.maps.drawing.OverlayType.POLYGON
]
},
map: map
});
/*events and listeners and blah blah*/
}
render() {
return (
<Map google={this.props.google}
onReady={this.initMap}
onClick={this.onMapClicked}
initialCenter={{...}}
zoom={15}
yesIWantToUseGoogleMapApiInternals >
<InfoWindow
visible={this.showingInfoWindow} >
</InfoWindow>
</Map>
);
}
}
export default GoogleApiWrapper({
apiKey: key,
libraries: ['drawing'],
LoadingContainer: LoadingContainer
})(DrawingMap);
没有绘图管理器的地图
/* global google */
import React from 'react';
import { Map, Marker, Polygon, InfoWindow, GoogleApiWrapper } from "google-maps-react";
class FullMap extends React.Component {
constructor(props) {
super(props);
this.state = {
..
}
}
initMap = (mapProps, map) => {
var self = this;
const { markers } = this.state;
const {google} = mapProps;
/* event listeners and whatnot */
}
render() {
const {markers, zoom, activeMarker, activePolygon, mapCenter} = this.state;
return (
<Map google={this.props.google}
onReady={this.initMap}
initialCenter={{lat:mapCenter.lat, lng: mapCenter.lng}}
center={{lat:mapCenter.lat, lng: mapCenter.lng}}
zoom={14}
streetViewControl={false}
yesIWantToUseGoogleMapApiInternals>
{markers && markers.map((marker, index) => marker && this.loadMarker(marker, index))}
</Map>
);
}
}
export default GoogleApiWrapper({
apiKey: key,
libraries: ['places','geometry']
})(FullMap);