Я использую response-google-maps, и я могу отображать маркер и InfoWindow, которые работают правильно, но я хочу показать только текущее активное окно маркеров.
Я использую состояние isOpen, чтобы сохранить текущий маркер и показать, соответствует ли он текущему ключу, но он по-прежнему позволяет вам щелкать и переключать все информационные окна маркеров. Я подозреваю, что делаю очень простую ошибку, но я новичок в ReactJS. Также обратите внимание, что я нашел очень похожие вопросы, но ни один из них не помог мне решить эту проблему.
Вот мой код ..
constructor(props){
super(props);
this.state = {
isOpen: '',
}
}
handleToggleOpen = (e) => {
this.setState({
isOpen: e
});
console.log(e);
console.log('current state is... ');
console.log(this.state.isOpen);
}
handleToggleClose = () => {
this.setState({
isOpen: null
});
}
render() {
// console.log(this.props.marker.id)
return (
<div>
<Marker
key={this.props.marker.id}
position={{ lat: parseFloat(this.props.marker.acf.locations.lat), lng: parseFloat(this.props.marker.acf.locations.lng)}}
icon={{
url: this.props.icon,
optimized: false,
scaledSize: new google.maps.Size(25, 37),
}}
onClick={() => this.handleToggleOpen(this.props.marker.id)}
audioPlay={this.props.audioPlay} >
{
this.state.isOpen === this.props.marker.id && (
<InfoWindow onCloseClick={this.handleToggleClose}>
<div>
<h3 className="infowindow__title">{this.props.marker.title.rendered} {this.props.marker.acf.title_sub} </h3>
<span onClick={() =>this.refs.componentToDisplay.showPopup()} className="infowindow__link underline">Learn more</span>
</div>
</InfoWindow>)
}
<PlacePopup ref="componentToDisplay" title={this.props.marker.title.rendered} intro={this.props.marker.acf.text} id={this.props.marker.id} subtitle={this.props.marker.acf.title_sub} audio={this.props.marker.acf.file} audioPlay={this.props.audioPlay} >
</PlacePopup>
</Marker>
</div>
)
}