Центр постоянно щелкает между местоположением пользователя и открытым маркером infoBox в Google Maps. - PullRequest
0 голосов
/ 07 июня 2019

Я использую для проекта и пакеты-реактив-карты-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)
);

В идеале я ожидал, что карта будет отображаться с жестко заданным центром по умолчанию, а затем, если / когдаданные о местоположении пользователя становятся доступными для однократного повторного центрирования карты в местоположении пользователя.

...