Я хотел переключать отдельные окна, но также должен был знать, были ли местоположения «активными» на родительском компоненте. Таким образом, в родительском компоненте у меня есть с активным ключом. Я передаю это на карту как компонент activeKey
, а также в первоначальный список со всеми данными о местоположении как locations
.
<GoogleMap defaultZoom={16} defaultCenter={this.state.currentLocation}>
{this.props.locations.map((location, i) => (
<Marker
key={location.key}
position={{
lat: location.latitude,
lng: location.longitude
}}
onClick={() => {
this.props.toggleLocationsActive(location.key);
// this.setCurrentLocation(location.latitude, location.longitude);
}}
>
{location.key === this.props.activeKey && (
<InfoWindow onCloseClick={props.onToggleOpen}>
<div>
{location.orgName}
{location.orgName !== location.programName &&
"/" + location.programName}
</div>
</InfoWindow>
)}
</Marker>
))}
</GoogleMap>
В родительском компоненте у меня было состояние = {activeKey: ""} и следующий метод:
toggleLocationsActive = locationKey => {
this.setState({
activeKey: locationKey
});
};
Обе передаются в реквизитах:
<Map
activeKey={this.state.activeKey}
toggleLocationsActive={this.toggleLocationsActive}
/>
Обратите внимание, что если вы не хотите, чтобы это состояние существовало в родительском компоненте, вы можете сделать это в компоненте карты.