我目前正在使用 react-google-maps,并且可以通过单击标记(从地图或列表中)正确显示标记和 InfoWindow。但是,一旦我单击要打开的标记,即使我选择了新的,以前的 InfoWindow 也会保持打开状态。
如果单击列表中的“x”或标记,我可以关闭信息窗口。但我不确定如何自动关闭其他 InfoWindow 并且只打开当前标记的 InfoWindow。
我查看了几个类似的问题以获得一个想法:在地图上显示多个标记时,单击标记时如何只打开一个信息窗口?, React-Google-Map 多个信息窗口打开 。
但是我仍然无法通过和检查唯一标记,以便只显示与标记 ID 匹配的信息窗口。
class MarkerInfoList extends Component {
constructor(props){
super(props);
this.state = {
isOpen: false
};
}
handleToggleOpen = (markerId) => {
this.setState({
isOpen: true
});
}
handleToggleClose = (markerId) => {
this.setState({
isOpen: false
});
}
render() {
const isOpen = this.state.isOpen;
return (
<div>
{this.state.isOpen ? (
<ul>
<li onClick={() => this.handleToggleClose()}>{this.props.venue}</li>
<Marker
key={this.props.index}
id={this.props.index}
position={{ lat: this.props.lat, lng: this.props.lng}}
defaultAnimation={google.maps.Animation.DROP}
onClick={() => this.handleToggleOpen(this.props.index)}>
<InfoWindow
id = {this.props.index}
onCloseClick={() => this.setState({isOpen: false})}>
<div key={this.props.index}>
<h4>{this.props.venue}</h4>
</div>
</InfoWindow>
</Marker>
</ul>
) : (
<ul>
<li onClick={() => this.handleToggleOpen()}>{this.props.venue}</li>
</ul>
)
}
</div>
)
}
}
export default MarkerInfoList;