I am currently building a google map api using react-google-maps and I would like to create multiple markers to display info of cities around the world on the info window. But since they are all from the html object. Whenever I clicked on one marker, all info windows will be opened. If there a way to fix this? Sample code:
<GoogleMap
defaultZoom={3}
defaultCenter={{ lat: 40.452906, lng: 190.818206 }}
>
<Marker id = "mark1"
options={{icon: Mark1}}
position={{ lat: 34.4076645, lng: 108.742099 }}
onClick={props.onToggleOpen}
>
{props.isOpen && <InfoWindow id = "info1"
onCloseClick={props.onToggleOpen}
>
<div> content1 </div>
</InfoWindow>}
</Marker>
<Marker
options={{icon: Mark2}}
position={{ lat: 35.6958783, lng: 139.6869534 }}
onClick={props.onToggleOpen}
>
{props.isOpen && <InfoWindow
onCloseClick={props.onToggleOpen}
>
<div> content2 </div>
</InfoWindow>}
</Marker>
</GoogleMap>
In your code,
onClick
ofMarker
you just call{props.onToggleOpen}
, which i hope toggles a flag. Here you should send which marker you are clicking so you need to modify youronClick
to something like belowIn the above line,
Mark1
should be a unique value that you can use to identify the respectiveMarker
. You can replace this with the marker id or of something that will be unique to the respectiveMarker
.Second, you need to modify
onToggleOpen
to toggle the flag for the respectivemarker
which is identified by the argument it receives(the unique value you send from `onClick). You can use an array like data structure to store this value.Then you need to show your
InfoWindow
based on the flag respective to theMarker
. ConsideringisOpen
will be an array of flags(after incorporating the above changes), one would showInfoWindow
using condition something like belowHope that leads you to a right direction.