Joa*_*oak 2 google-maps reactjs
我使用“google-maps-react”并尝试通过点击向我的地图添加新标记。
我目前设法控制台记录特定的 latLng,但似乎无法创建一个新的。我对 React 还很陌生。
我的 onMapClick 用于查找纬度和经度。但我认为我需要将位置添加到数组中,然后使用该数组来更新地图。可能是错的
onMapClick = (map,maps,e) => {
const { latLng } = e;
const latitude = e.latLng.lat();
const longitude = e.latLng.lng();
console.log(latitude + ", " + longitude);
var marker = new window.google.maps.Marker({
position: e.latLng,
setMap: map,
});
}
Run Code Online (Sandbox Code Playgroud)
我目前的解决方案是,我只是在 render() 中硬编码了一些标记,其中包含标记中数组的位置
<Marker
onClick={this.onMarkerClick}
name={storedLocations[0]}
position={{lat:listLatitude[0], lan:listLongitude[0]}}
/>
Run Code Online (Sandbox Code Playgroud)
我的信息窗口是:
<InfoWindow
marker={this.state.activeMarker}
visible={this.state.showingInfoWindow}
onClose={this.onClose}
>
<div>
<h4>{this.state.selectedPlace.name}</h4>
</div>
</InfoWindow>
</Map>
Run Code Online (Sandbox Code Playgroud)
我的 onMapClick 用于查找纬度和经度。但我认为我需要将位置添加到数组中,然后使用该数组来更新地图。
这确实是 React 的方式,但不是通过 Google Maps API 实例化标记,而是考虑通过保留数据(标记位置),stateReact 将像这样完成其余的操作:
class MapContainer extends React.Component {
constructor(props) {
super(props);
this.state = {
locations: []
};
this.handleMapClick = this.handleMapClick.bind(this);
}
handleMapClick = (ref, map, ev) => {
const location = ev.latLng;
this.setState(prevState => ({
locations: [...prevState.locations, location]
}));
map.panTo(location);
};
render() {
return (
<div className="map-container">
<Map
google={this.props.google}
className={"map"}
zoom={this.props.zoom}
initialCenter={this.props.center}
onClick={this.handleMapClick}
>
{this.state.locations.map((location, i) => {
return (
<Marker
key={i}
position={{ lat: location.lat(), lng: location.lng() }}
/>
);
})}
</Map>
</div>
);
}
}
Run Code Online (Sandbox Code Playgroud)
解释:
locationsstate 用于在单击地图后跟踪所有位置
locations状态传递给 Marker 组件以渲染标记
下一步可能是为标记列表引入一个单独的组件, Thinking in React讲述了以下组件:
其中一种技术是单一责任原则,即组件在理想情况下应该只做一件事。如果它最终增长,它应该被分解成更小的子组件。
const MarkersList = props => {
const { locations, ...markerProps } = props;
return (
<span>
{locations.map((location, i) => {
return (
<Marker
key={i}
{...markerProps}
position={{ lat: location.lat(), lng: location.lng() }}
/>
);
})}
</span>
);
};
Run Code Online (Sandbox Code Playgroud)
这是一个演示,演示如何通过google-maps-react库在地图点击上添加制造商
| 归档时间: |
|
| 查看次数: |
9374 次 |
| 最近记录: |