3

我的google-maps-react项目中有,但我不知道如何从地图中获取所有标记?

import React, { Component } from "react";
import { Map, InfoWindow, Marker, GoogleApiWrapper } from "google-maps-react";
import "../Body/Map.css";
import marker_icon from "../../img/marker_icon.png";
import hover_icon from "../../img/hover_icon.png";
import { Grid, Row, Col } from "react-bootstrap";
/*global google*/

export class MapContainer extends Component {
  constructor(props) {
    super(props);

    this.state = {
      showingInfoWindow: false,
      activeMarker: {},
      selectedPlace: {}
    };
  }

  onMarkerClick = (props, marker, e) => {
    this.setState({
      selectedPlace: props,
      activeMarker: marker,
      showingInfoWindow: true
    });
  };

  onMapClicked = props => {
    if (this.state.showingInfoWindow) {
      this.setState({
        showingInfoWindow: false,
        activeMarker: null
      });
    }
  };

  addMarker = (mapProps, map) => {
    var marker = new google.maps.Marker({
      position: {},
      map: map
    });
  };

  render() {
    const google = window.google;
    const data = this.props.data;

    return (
      <div className="map-container">
        <Map
          google={this.props.google}
          className={"map"}
          zoom={1}
          onClick={this.onMapClicked}
          onReady={this.addMarker}
        >
          {data.map(item => (
            <Marker
              key={item.id}
              title={item.name}
              name={item.name}
              position={{ lat: item.lat, lng: item.lng }}
              onClick={this.onMarkerClick}
            />
          ))}
          <InfoWindow
            marker={this.state.activeMarker}
            visible={this.state.showingInfoWindow}
          >
            <div className="info">
              <h1>{this.state.selectedPlace.name}</h1>
            </div>
          </InfoWindow>
        </Map>
      </div>
    );
  }
}

export default GoogleApiWrapper({
  apiKey: "AIzaSyDLgdweTnvhPnUE5yzdxcMeK876cFtMaSk"
})(MapContainer);
4

2 回答 2

1

我有一个类似的问题。我想删除所有旧标记并添加新标记列表。这是我修复它的代码:

const MyMap = (props) => {

  const [markers, setMarkers] = React.useState([])

  React.useEffect(() => {
    var markerArr = []
    points.map(p => {
      markerArr.push(<Marker position={{lat: p.lat, lng: p.lng}} />)
      }
    )
    setMarkers(markerArr)
  }, [])

  const MarkerUpdater = (day) => {
    var markerArr = []
    points.map(p => {
      markerArr.push(
        <Marker position={{lat: p.lat, lng: p.lng}} />
        )
      }
    )
    setMarkers(markerArr)
  }

  return <Map> {markers} </Map>
}

笔记

你应该MarkerUpdater在任何你想更新标记的地方打电话

于 2020-03-14T18:20:23.797 回答
0

您可能打算访问google.maps.Marker对象,如果是这样,您可以考虑使用Callback Refs

1)分配ref属性以存储对Marker节点的引用:

<Marker  ref={this.onMarkerMounted}
      key={item.id}
      title={item.name}
      name={item.name}
      position={{ lat: item.lat, lng: item.lng }}
/>  

2)将标记实例保存到markerObjects数组中:

export class MapContainer extends Component {
  constructor(props) {
    super(props);
    this.state = {
      markerObjects: []
    };


    this.onMarkerMounted = element => {
      this.setState(prevState => ({
        markerObjects: [...prevState.markerObjects, element.marker]
      }))
    };
  }

  render() {
    const google = window.google;
    const data = this.props.data;

    return (
      <div className="map-container">
        <Map
          google={this.props.google}
          className={"map"}
          zoom={4}
          defaultCenter={{ lat: -35.0317893, lng: 125.219989 }}
          position={{ lat: -35.0317893, lng: 125.219989 }}
        >
          {data.map(item => (
            <Marker ref={this.onMarkerMounted}
              key={item.id}
              title={item.name}
              name={item.name}
              position={{ lat: item.lat, lng: item.lng }}
            />
          ))}
        </Map>
      </div>
    );
  }
}
于 2018-07-30T09:30:10.330 回答