У меня есть массив от 1000 мин до 5000 макс точек для рисования на моей карте листовок. Итак, моя функция рендеринга в компоненте карты выглядит примерно так:
renderMarkers = () => {
return markers.map(
(marker) => {
return <Marker key={`${marker.id}`} position={[marker.lt, marker.lg]} ></Marker>
}
)
}
render() {
<Map>
{this.renderMarkers()}
</Map>
}
Моя проблема в том, что для рендеринга html на карте обычно требуется от 1 до 3 секунд, и пользовательский опыт ужасен, поскольку окно время от времени немного блокируется при перемещении карты.
Есть ли способ разделить рендеринг всех маркеров на разделы или позволить окну загружать этот javascript async или отображать значок загрузки во время работы функции карты?
Было бы здорово узнать, даже если есть лучший подход, чем тот, который я делаю.
заранее спасибо
РЕДАКТИРОВАТЬ: не нужно ничего делать с кластеризацией, поскольку он уже кластеризует маркеры, имеет отношение к тому, чтобы каким-то образом показать пользователю, что javascript запущен, поэтому ему нужно подождать, или отобразить асинхронно, чтобы карта текла.
key
должен однозначно идентифицировать объект, поэтому отличный способ разрушить различие виртуальных доменов состоит в том, чтобы вместо этого основывать его на некоторой позиции массива. Не используйтеmarker-${key}
, используйте какое-нибудь свойство из маркера, чтобы React не тратил время на восстановление маркеров только потому, что они поменяли местами индекс в вашем массиве. - person Mike 'Pomax' Kamermans   schedule 22.05.2018