根據React Google Maps library,你可以從ref對象調用這四個方法。react-google-maps:如何使用fitBounds,panBy,panTo,panToBounds公共API?
什麼似乎不可思議,就是這些方法都應該接受兩個參數,一個地圖實例和其他參數,像這樣:
fitBounds(map, args) { return map.fitBounds(...args); }
但是,調用fitBounds時()這樣,什麼都不會發生在地圖,沒有邊界被改變,沒有錯誤被拋出。這是我所構成的組件的方式,呼籲fitBounds在componentDidUpdate:
import React from 'react'
import { withGoogleMap, GoogleMap, InfoWindow, Marker, OverlayView } from 'react-google-maps'
import InfoBox from 'react-google-maps/lib/addons/InfoBox'
import map from 'lodash/map'
// Higher-Order Component
const AllocatedPlacesMap = withGoogleMap(props => (
<GoogleMap
center={props.center}
defaultZoom={4}
options={{ scrollwheel: false, minZoom: 3, maxZoom: 15 }}
onCenterChanged={props.onCenterChanged}
ref={props.onMapMounted}>
{props.markers.map((marker, index) => (
<Marker
key={index}
position={marker.position}
/>
))}
</GoogleMap>
));
class Map extends React.Component {
constructor(props) {
super(props);
this.state = {
};
}
getCenter =() => {
this._bounds = new google.maps.LatLngBounds();
this.props.markers.forEach((marker, index) => {
const position = new google.maps.LatLng(marker.lat, marker.lng);
this._bounds.extend(position);
});
return this._bounds.getCenter();
}
componentDidUpdate() {
this._map.fitBounds(this._map, this._bounds);
}
handleMapMounted = (map) => {
this._map = map;
}
render() {
return (
<div className="allocated-places">
<AllocatedPlacesMap
containerElement={
<div style={{ height: `100%` }} />
}
mapElement={
<div style={{ height: `100%` }} />
}
center={this.getCenter()}
markers={props.markers}
onMapMounted={this.handleMapMounted}
/>
</div>
)
}
}
export default Map;
的是什麼叫fitBounds()在這種情況下,正確的方法你知道嗎?文件和實例在這方面似乎缺乏。
fitBounds()不再需要地圖實例作爲第一個參數。這個bug也是在圖書館的第9版中修復的。 –