【问题标题】:react native maps moving without user input在没有用户输入的情况下对移动的原生地图做出反应
【发布时间】:2018-11-01 11:35:57
【问题描述】:

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

我的问题是当用户移动地图位置时,地图开始随机移动而不停止,如果不关闭地图窗口就无法停止。

当地图加载时,我得到标记并加载到地图上,类似于谷歌地图,我在地图上搜索此区域按钮,我使用 onRegionChangeComplete 将新区域存储到状态。

我的onRegionChangeComplete 代码是,

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

};

【问题讨论】:

  • 请分享onRegionChangeComplete功能码
  • @Shivam 我已经更新了我的答案
  • 我已经发布了答案,让我知道这是否适合你。

标签: android react-native react-native-maps


【解决方案1】:

我猜问题是您使用onRegionChangeComplete 回调将新区域存储到状态。即this.state.region。并且 region 属性被传递给 MapView 组件。

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

更新

另外一件事使用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'});

【讨论】:

    猜你喜欢
    • 2019-12-15
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多