У меня проблемы с модулем react-google-maps, а именно с маркерами и повторным рендерингом компонентов.
Это сценарий:
- Загрузить страницу с картой и 2-3 маркерами на ней (ок)
- Щелкните вкладку на панели навигации -> страница отображает что-то еще в стиле одностраничного приложения (хорошо)
- Щелкните вкладку на панели навигации, которая ведет обратно к карте -> страница отображает карту, но маркеры не отображаются.
Я храню данные маркеров в состоянии и применяю их к карте в onGoogleApiLoaded={({map, maps}) => this.renderMarkers(map, maps)}
.
Мне удалось решить эту проблему, заключив renderMarkers
в setTimeout
за одну секунду, и таким образом он отлично загружается.
Мне не нравится это решение, и я считаю, что просто не делаю его так, как должен. Я считаю, что маркеры пытаются разместить себя на карте, которая не отображается, но любопытно, что даже безsetTimeout
он работает для страницы по умолчанию (возможно, что-то связано с жизненным циклом реагирующего компонента, я не знаю).
Есть ли способ прикрепить свойство onGoogleApiLoaded={({map, maps}) => this.renderMarkers(map, maps)}
после полной загрузки карты? Или, по крайней мере, отложите это до тех пор, пока я не буду на 100% уверен, что карта загружена, а не какое-то случайное количество секунд.
РЕДАКТИРОВАТЬ: я назначал маркеры с помощью метода marker.setMap(map)
, и я просто попытался настроить свойство map: map
в конструкторе маркера, но поведение осталось прежним.