#reactjs #google-maps #marker #infowindow #react-google-maps
Вопрос:
Я действительно не понимаю, почему после нажатия на маркер появляются два информационных окна, странно, что иногда в режиме проверки информационное окно отображается нормально. Мне интересно, не является ли обратный вызов причиной проблемы. Код приведен ниже:
import { GoogleMap, Marker,withGoogleMap,withScriptjs, InfoWindow } from "react-google-maps";
import { nanoid } from 'nanoid'
import React, { Component } from 'react'
const API_KEY = 'INSERT_API_KEY'
const MyMapComponent = withScriptjs(withGoogleMap((props) =>
<GoogleMap
defaultZoom={8}
defaultCenter={{ lat: -33.897, lng: 151.144 }}
>
{props.locs.map((location)=>{
const onMarkerClick = props.onMarkerClick.bind(this,location)
return <Marker
key={nanoid()}
position={location}
onClick={onMarkerClick}>
</Marker>
})}
{props.showingInfoWindow amp;amp;
<InfoWindow position={props.activeMarker} onCloseClick={props.markerInfoClose}>
<h1>Details</h1>
</InfoWindow>}
</GoogleMap>
));
export default class Test extends Component {
constructor(props) {
super(props);
this.state = {
locations:[{lat: -33.865143,lng: 151.2},],
showingInfoWindow: false,
activeMarker: {},
};
}
onMarkerClick = (location) =>{
this.setState({
activeMarker: location,
showingInfoWindow: true
});
}
onClose = () => {
if (this.state.showingInfoWindow) {
this.setState({
activeMarker: null,
showingInfoWindow: false
});
}
};
render() {
console.log(this.state.activeMarker)
return (
<div>
<MyMapComponent
locs={this.state.locations}
onMarkerClick={this.onMarkerClick}
showingInfoWindow={this.state.showingInfoWindow}
activeMarker={this.state.activeMarker}
markerInfoClose={this.onClose}
containerElement={ <div style={{ height: `1000px`, width: '1000px' }} /> }
mapElement={ <div style={{ height: `100%` }} /> }
loadingElement={<div style={{ height: `100%` }} />}
googleMapURL={`https://maps.googleapis.com/maps/api/js?v=3.expamp;libraries=geometry,drawing,placesamp;key=${API_KEY}`}
>
</MyMapComponent>
</div>
)
}
}
Комментарии:
1. Я попытался запустить ваш код и, похоже, не могу воспроизвести проблему, при которой генерируются 2 информационных окна. Я вижу только одного. Кроме того, ссылка на изображение, которую вы предоставили, кажется, повреждена. Наконец, я удалил ключ API, который вы включили в свой вопрос. Пожалуйста, в будущем не размещайте свой ключ API на общедоступных сайтах, таких как StackOverflow.
2. Упс, ссылка на изображение не нарушена, но вот пример кода , в котором показано только 1 информационное окно.