реагировать на перемещение собственных карт без участия пользователя - PullRequest
0 голосов
/ 01 ноября 2018

Это мой код MapView,

        <MapView
      style={styles.map}
      initialRegion={
        this.state.region 
      }
      region={this.state.region}
      onRegionChangeComplete={this.onRegionChange}
      showsMyLocationButton
      showsCompass
      showsUserLocation 
      zoomControlEnabled 
      loadingEnabled
      onMapReady={this.state.placesread ? this.getBreakfast : null}
    >
      {marker}
    </MapView>

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

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

мой onRegionChangeComplete код,

  onRegionChange = async region => {
await this.setState({ region });
await this.setState({ regionChange: true });

};

1 Ответ

0 голосов
/ 01 ноября 2018

Полагаю, проблема в том, что вы используете onRegionChangeComplete обратный вызов для сохранения нового региона в состоянии. то есть this.state.region. и что region опора передается в MapView Компонент.

Попробуйте удалить region={this.state.region} из MapView компонента.

Обновление

Также еще одна вещь, использующая await с setState, является полностью избыточной (await this.setState({ region })), потому что setSate не возвращает promise, но undefined.

setState - асинхронная функция. Если вы хотите дождаться этого, вы можете поместить его в обещание и разрешить в обратном вызове / втором аргументе.

Например, когда вы хотите, чтобы setState вел себя как синхронный вызов promisedSetState, вот так.

promisedSetState = (newState) => new Promise((resolve) => {
        this.setState(newState, () => {
            resolve();
        });
});
//await the promise to get resolved
await promisedSetState({newState: 'whatever it is'});
...