Существует пример « Пользовательский HTML InfoBox » для Bing Maps. По иронии судьбы, в настроенном InfoBox нет кнопки закрытия. Каждый InfoBox (InfoWindow) других API-интерфейсов карты (Google Map, MapBox,) имеет кнопку закрытия по умолчанию с настраиваемым содержимым HTML, за исключением одного из Bing Map API. Трудно закрыть InfoBox без кнопки закрытия.
Итак, я должен добавить кнопку закрытия в настраиваемый HTML InfoBox. Ниже приведен псевдокод, который я пишу. Я использую React + Next.js.
// MyInfoBox.js
export class MyInfoBox extends Component {
constructor(props) {
super(props);
const { map, pos, events, children } = props;
const htmlContent = renderToStaticMarkup(
<div>
<button onClick={events.close}>✖</button>
{children}
</div>
);
const infoBox = new Microsoft.Maps.InfoBox(
pos,
htmlContent,
);
infoBox.setMap(map);
}
render() {
return null;
}
}
// index.js
export default () => <MyInfoBox events={{ close: () => console.log('close') }} />;
InfoBox принимает только HTML для параметра содержимого (почему не элемент DOM?). К сожалению, renderToStaticMarkup (или renderToString) отображает все свойства, кроме onClick, в HTML. Таким образом, реакция на нажатие кнопки закрытия отсутствует.
Как написать доступную кнопку закрытия для настраиваемого информационного блока HTML Bing Map в проекте React?