Я строю визуализатор лодки, используя AISHub. Я смог найти нужные суда по широте / долготе и показать их на карте. Однако есть слишком много судов (маркеров), и я не знаю, кто есть кто.
Проблема : Как динамически отобразить всплывающее окно после нажатия на маркер, как показано ниже?
Ниже Самая важная часть кода, который я использую:
class BoatMap extends Component {
constructor(props) {
super(props);
this.state = {
buttonEnabled: true,
buttonClickedAt: null,
progress: 0,
ships: [],
type: 'All',
shipTypes: [],
activeShipTypes: [],
logoMap: {}
};
this.updateRequest = this.updateRequest.bind(this);
this.countDownInterval = null;
}
// ... other operations
// ... other operations
render() {
return (
<div className="google-map">
<GoogleMapReact
bootstrapURLKeys={{ key: 'My_KEY' }}
center={{
lat: this.props.activeShip ? this.props.activeShip.latitude : 42.4,
lng: this.props.activeShip ? this.props.activeShip.longitude : -71.1
}}
zoom={8}
>
{/* Rendering all the markers here */}
{this.state.ships.map((ship) => (
<Ship
ship={ship}
key={ship.CALLSIGN}
lat={ship.LATITUDE}
lng={ship.LONGITUDE}
logoMap={this.state.logoMap}
/>
))}
<select className="combo-companies" onClick={this.props.handleDropdownChange}>
<option value="All">All</option>
{this.state.shipTypes.map((type) => (
<option
className={this.state.activeShipTypes.includes(type) ? 'active' : ''}
key={type}
value={type}
>
{type}
</option>
))}
</select>
</GoogleMapReact>
</div>
);
}
}
Что я сделал до сих пор:
1) Я нашел этот пост что было полезно, чтобы понять процедуру. Но, к сожалению, я не смог ее решить.
2) Также я нашел этот , который очень полезен, но есть две проблемы, которые мешают мне его использовать: а) информационное окно не является динамическим c, и б) я использую google-map-react
, но сообщение не:
3) Наконец, я попытался написать свой собственный компонент InfoWindowBox.js
, и ниже это то, что у меня есть сделано до сих пор, но понятия не имею, иду ли я в правильном направлении или нет, и если это должно быть реализовано в исходном коде:
InfoWindowBox. js
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import { InfoWindow } from 'google-maps-react';
export default class InfoWindowEx extends Component {
constructor(props) {
super(props);
this.infoWindowRef = React.createRef();
this.contentElement = document.createElement(`div`);
}
componentDidUpdate(prevProps) {
if (this.props.children !== prevProps.children) {
ReactDOM.render(React.Children.only(this.props.children), this.contentElement);
this.infoWindowRef.current.infowindow.setContent(this.contentElement);
}
}
render() {
return <InfoWindow ref={this.infoWindowRef} {...this.props} />;
}
}
Пожалуйста, кто-нибудь прошел через это, укажи правильное направление для его решения, поскольку у меня заканчиваются идеи.