Как обновить положение маркера без повторного рендеринга карты? Реагировать на собственные карты

Я обновляю несколько позиций маркеров на основе состояния массива маркеров. Поэтому, когда я обновляю его с помощью setState, функция рендеринга срабатывает как обычно, и mapview повторно отображает. Поскольку у него есть начальный регион и свойства региона, он автоматически фокусируется на местоположении игрока в зависимости от его состояния (я не хочу этого, я хочу это только при начальной загрузке).

Как обновить положение маркеров без повторного рендеринга карты?

 render() {
    return (
      <MapView
        initialRegion={this.state.playerLocation}
        region={this.state.playerLocation}
        style={ styles.map }>
          {this.renderMarkers()}
       </MapView>
    );
  }

renderMarkers = () => {
  return(
    this.state.markers.map(marker=>{
      return(
        <Marker coordinate = {{
           latitude: marker.lat,
           longitude: marker.long
         }}      
         title={marker.id}/>
      )
  })
}

person l0veisreal    schedule 30.08.2018    source источник


Ответы (1)


Это очень распространенная проблема в React, и для нее есть очень хорошее решение.

Используйте метод жизненного цикла под названием shouldComponentUpdate

https://reactjs.org/docs/react-component.html#shouldcomponentupdate

Вы можете попробовать извлечь маркеры рендеринга в отдельный компонент, а затем добавить lifeCycle, чтобы постоянно возвращать значение False. Это было после того, как компонент смонтирован, он больше не будет повторно визуализироваться.

Я не уверен, вызовет ли это регресс в вашем случае, но если это так, вы можете передать опору, которая может запускать повторный рендеринг в вашем SCU и при необходимости обновлять маркеры. Это то, с чем вам нужно поиграть.

person Umair Ahmed    schedule 31.08.2018