Я использую для проекта и пакеты-реактив-карты-Google, и пакеты-гео-локацию для проекта - моя проблема в том, что каждый раз, когда я нажимаю на маркер, чтобы открыть его информационный блок, карта привязывается к местоположению пользователя, а затем привязываетсявернуться к маркеруЕсли я просто установлю центр для ссылки на const defaultPosition, который я определил ранее в файле, этого не произойдет.Маркеры / информационные ящики не вызывают эту проблему повторного центрирования.
HOC с географическим местоположением занимает секунду, чтобы фактически найти позицию пользователя, которая затем передает ее компоненту GoogleMaps в качестве реквизита, поэтому я установилтроичный для «центра» в компоненте GoogleMap, который будет загружен с местоположением по умолчанию, а затем, если он найдет пользовательские координаты, обновит центр до координат с географическим местоположением (в моем примере HOC с геолокацией передает координаты в карту в качестве подпорок.coords).
Я чувствую, что отчасти проблема в том, что HOC геолокации занимает секунду или две, чтобы фактически найти информацию о пользователе и передать ее в мой компонент GoogleMap, и я не уверен, как эффективно учесть это в моемтекущий код ... Опять же, я заметил, что всякий раз, когда я вообще передаю что-то в центр в качестве опоры, возникает эта проблема с переворотом ...
Есть ли другой / лучший способ реализации моегопример кода, чтобы остановить перерыв назад и вперед между местоположением пользователя и выбранным маркером?
import React from 'react';
import { compose, withStateHandlers } from 'recompose';
import {
withScriptjs,
withGoogleMap,
GoogleMap,
Marker,
InfoWindow
} from 'react-google-maps';
import mapStyles from '../../mapStyle';
import { fetchMovie } from '../reducers/omdbMovieReducer';
import { connect } from 'react-redux';
import { geolocated } from 'react-geolocated';
const defaultPosition = { lat: 40.742963, lng: -73.986683 };
const Map = compose(
withStateHandlers(
() => ({
currentlySelected: null
}),
{
onMarkerClicked: ({ currentlySelected }) => movieId => ({
currentlySelected: movieId
})
},
{
removeSelected: ({ currentlySelected }) => () => ({
currentlySelected: null
})
}
),
withScriptjs,
withGoogleMap
)(props => (
<GoogleMap
defaultZoom={15}
center={
props.coords
? { lat: props.coords.latitude, lng: props.coords.longitude }
: defaultPosition
}
defaultOptions={{ styles: mapStyles }}
>
{props.coords && (
<Marker
key="userPosition"
position={{ lat: props.coords.latitude, lng: props.coords.longitude }}
/>
)}
...OMMITED CODE ...
export default geolocated({
positionOptions: {
enableHighAccuracy: false
},
userDecisionTimeout: 5000
})(
connect(
mapStateToProps,
mapDispatchToProps
)(Map)
);
В идеале я ожидал, что карта будет отображаться с жестко заданным центром по умолчанию, а затем, если / когдаданные о местоположении пользователя становятся доступными для однократного повторного центрирования карты в местоположении пользователя.