Маркер перемещения React без повторного рендеринга карты в react-google-maps

Я использую response-google-maps для отображения маркера из данных широты / долготы. Это работает нормально, но при каждом обновлении данных маркера выполняется рендеринг всего компонента. Есть ли способ обновить только маркер? Мой код ниже. Данные поступают быстро, поэтому я разрешаю им обновляться каждые 10 секунд. Я одновременно обновляю маркер и центр.

import React, { Component } from 'react';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import * as actions from '../actions';
import { compose, withProps } from 'recompose';
import { withScriptjs, withGoogleMap, GoogleMap, Marker } from 'react-google-maps';
import globalStyles from '../App.css';
import styles from '../styles/ViewMap.module.scss';

class ViewMap extends Component {
  constructor() {
    super();
    this.state = {
      lat: 0,
      long: 0,
      updateMap: true
    };
  }

  shouldComponentUpdate(nextProps, nextState) {
    if (this.state.updateMap){
      return true;
    }
    else {
      return false;
    }
  }

  componentWillUpdate() {
    if (this.state.updateMap) {
      for (var key in this.props.vehicleAggregateData.vehiclesData) {
        if (key === this.props.vin) {
          let latitude = this.props.vehicleAggregateData.vehiclesData[key].position[0];
          let longitude = this.props.vehicleAggregateData.vehiclesData[key].position[1];
          var self = this;
          window.setTimeout(function(){
            self.setState({ updateMap: true, lat: latitude, long: longitude });
          }, 10000);
          self.setState({ updateMap: false});
        }
      }
    }
    else{
      return false;
    }
  }

  render() {
    const MyMapComponent = compose(
      withProps({
        googleMapURL:
          'https://maps.googleapis.com/maps/api/js?key=AIzaSyBitA9VEk3r2trmEW-xXTh_8YDpcIfBwy4&v=3.exp&libraries=geometry,drawing,places',
        loadingElement: <div className = {globalStyles.paperCard} />,
        containerElement: <div style = {{ height: '100%' }} />,
        mapElement: <div style = {{ height: '100%' }} />
        // key:"AIzaSyBitA9VEk3r2trmEW-xXTh_8YDpcIfBwy4"
      }),
      withScriptjs,
      withGoogleMap
    )(props => (
      <GoogleMap defaultZoom = {18} defaultCenter = {{ lat: parseFloat(this.state.lat), lng: parseFloat(this.state.long) }}>
        {props.isMarkerShown && <Marker position = {{ lat: parseFloat(this.state.lat), lng: parseFloat(this.state.long) }} />}
      </GoogleMap>
    ));

    return (
      <div className = {styles.map + " " + globalStyles.cardShadow}>
        <MyMapComponent isMarkerShown />
      </div>
    );
  }
}

function mapStateToProps(state) {
  return {
      vehicleAggregateData: state.vehicleData
  };
}

function mapDispatchToProps(dispatch) {
  return {
      actions: bindActionCreators(actions, dispatch),
  };
}

export default connect(mapStateToProps, mapDispatchToProps)(ViewMap);

Я не думаю, что можно только обновить маркер. Без других настроек функция setState заставит компонент снова отрисоваться.

Root 19.10.2018 05:11
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
1
944
0

Другие вопросы по теме