Google Maps React,添加带有 lat lng 的标记

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)

Vad*_*hev 5

我的 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库在地图点击上添加制造商