Como eu recoloco um componente GoogleMap React em um novo endereço usando react-google-maps?

Nov 06 2020

Estou renderizando um componente do GoogleMap usando a biblioteca "react-google-maps" do React. Posso definir uma inicial defaultLocationque funciona bem quando o mapa é carregado inicialmente. Na documentação, diz que o componente leva um suporte "central" para o qual se pode passar um lat e um lng, mas não consigo renderizá-lo / centralizá-lo novamente em um novo local. Sempre mostra o local padrão. Alguma ideia do que estou fazendo de errado?

Existe talvez uma maneira de como eu posso usar o estado fora da addAdressComponentclasse para que possa definir dinamicamente o inicial em defaultCentervez de usar adereços na seção de renderização?

import { withGoogleMap, GoogleMap, Marker } from 'react-google-maps';
/*global google*/

const MapWithMarker = withGoogleMap((props) => (
  <GoogleMap
    defaultZoom={12}
    defaultCenter={{ lat: 47.376888, lng: 8.541694 }}
    options={{
      disableDefaultUI: true,
    }}
  >
    <Marker position={{ lat: 47.376888, lng: 8.541694 }} />
  </GoogleMap>
));

class addAddressComponent extends Component {
  constructor(props) {
    super(props);
    this.state = {
      lat: 0,
      lng: 0,
    };
    this.onSuggestSelect = this.onSuggestSelect.bind(this);
  }

  onSuggestSelect(suggest) {
    console.log(suggest.location);
    this.setState(() => {
      return {
        lat: 10.0,
        lng: 20.022,
      };
    });
  }
  render() {
    return (
      <div className="wrapperClass">
        <MapWithMarker
          containerElement={<div style={{ height: '244px' }} />}
          mapElement={<div style={{ height: '100%' }} />}
          className="mapCSS"
          center={(this.state.lat, this.state.lng)}
          style={{
            width: '348px',
            height: '250px',
          }}
        />
      </div>
    );
  }
}

export default addAddressComponent;

Respostas

qusc Nov 07 2020 at 02:21

Você precisará passar a centerpropriedade para o seu GoogleMapcomponente dentro do seu MapWithMarkercomponente. Além disso, o argumento central precisa ser um objeto como este:

{lat: -34.397, lng: 150.644}

O exemplo a seguir permite que você altere o centro do mapa usando o botão:

import logo from './logo.svg';
import './App.css';
import { withScriptjs, withGoogleMap, GoogleMap, Marker } from 'react-google-maps';
import {useState} from "react";
const MyMapComponent = withScriptjs(withGoogleMap((props) =>
    <GoogleMap
        defaultZoom={13}
        center={props.center}
        defaultCenter={{ lat: -34.397, lng: 150.644 }}
    >
      {props.isMarkerShown && <Marker position={{ lat: -34.397, lng: 150.644 }} />}
    </GoogleMap>
))
function App() {
  const [position, setPosition] = useState({ lat: -34.397, lng: 150.644 });
  return (
    <div className="App">
      <button onClick={() => setPosition({lat: 30, lng: 10})}>,
        Click me
      </button>
      <MyMapComponent
          isMarkerShown
          googleMapURL="https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=geometry,drawing,places"
          loadingElement={<div style={{ height: `100%` }} />}
          containerElement={<div style={{ height: `100%` }} />}
          center={position}
          mapElement={<div style={{ height: `1000px`}} />}
      />
    </div>
  );
}
export default App;