onRegionChangeComplete 被调用太多次,而不是在事件真正结束时

问题描述 投票:0回答:3

当我没有结束捏地图时会调用此方法,有办法解决这个问题吗?

https://i.stack.imgur.com/GHQNc.jpg

这是代码

<MapView
    style={{flex:1}}
    region={{
    latitude: parseFloat(this.state.initialPosition.coords.latitude),
        longitude: parseFloat(this.state.initialPosition.coords.longitude),
    latitudeDelta,
    longitudeDelta,
    }}
    showsUserLocation={true}
    onRegionChangeComplete={(region) => {
         console.log('onRegionChangeComplete called!');
    }}
/>
react-native maps
3个回答
3
投票

使用

initialRegion
代替区域,效果会很好。 实际上,当您同时使用区域和
onRegionChangeComplete
时,
onRegionChangeComplete
会充当
callback
并在每次区域更改时触发,从而再次更改区域。这样,就进入了无限循环。 更好地将
initialRegion
onRegionChangeComplete
一起使用。


0
投票

我只是通过设置超时来解决它!这是方法

<MapView
    style={{flex:1}}
    showsUserLocation={true}
    onRegionChange={(region) => {
        if(this.timeout){
            clearTimeout(this.timeout);
        }
        this.timeout = setTimeout(() => {
                this.getDoctorsByGeolocation(region);
        },1000);
    }}
/>

我希望这可以帮助任何人!


0
投票

我只是通过 setTimeout 来解决它!这是我的代码:

const allowChangeRegion = React.useRef(false);
  React.useEffect(() => {
    const timeout = setTimeout(() => {
      console.log('set allowRegion = true');
      allowChangeRegion.current = true;
    }, 2000);
    return () => {
      if (timeout) {
        clearTimeout(timeout);
        console.log('set allowRegion = false');
        allowChangeRegion.current = false;
      }
    };
  }, []);

<MapView
        provider="google"
        style={styles.map}
        mapType="standard"
        showsIndoorLevelPicker
        showsUserLocation
        showsMyLocationButton
        region={props.region}
        onRegionChangeComplete={(region, detail) => {
          if (allowChangeRegion.current || detail.isGesture) {
            props.onChangeRegion(region);
          }
        }}>
        {}
</MapView>

希望可以帮助到大家!

© www.soinside.com 2019 - 2024. All rights reserved.