在没有用户输入的情况下移动原生地图

react native maps moving without user input

这是我的 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>

我的问题是,当用户移动地图位置时,地图开始不停地随机移动,并且不关闭地图就无法停止window。

当加载地图时,我得到标记并加载到地图上,类似于 google 地图,我在地图上有一个搜索此区域的按钮,我正在使用 onRegionChangeComplete 来存储新的国家地区。

我的onRegionChangeComplete代码是,

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

};

我想问题是您正在使用 onRegionChangeComplete 回调将新区域存储到状态。即 this.state.regionregion 道具被传递给 MapView 组件。

尝试从 MapView 组件中删除 region={this.state.region}

更新

还有一件事使用 awaitsetState 是完全多余的(await this.setState({ region }))因为 setSate 不 return promiseundefined.

setState是异步函数。如果你想等待它,你可以做的是将它放入承诺中并在 callback/second 参数中解决。

例如,每当您希望 setState 像这样作为同步调用 promisedSetState 时。

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