реагировать на перемещение собственных карт без участия пользователя

Это мой код 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 });

};


person Naveed Sheriffdeen    schedule 01.11.2018    source источник
comment
Пожалуйста, поделитесь кодом функции onRegionChangeComplete   -  person Shivam    schedule 01.11.2018
comment
@Shivam Я обновил свой ответ   -  person Naveed Sheriffdeen    schedule 01.11.2018
comment
Я разместил ответ, дайте мне знать, если это сработает для вас.   -  person Shivam    schedule 01.11.2018


Ответы (1)


Я предполагаю, что проблема в том, что вы используете обратный вызов 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'});
person Shivam    schedule 01.11.2018