在没有用户输入的情况下移动原生地图
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.region
。 region
道具被传递给 MapView
组件。
尝试从 MapView
组件中删除 region={this.state.region}
。
更新
还有一件事使用 await
和 setState
是完全多余的(await this.setState({ region })
)因为 setSate 不 return promise
但 undefined
.
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'});
这是我的 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.region
。 region
道具被传递给 MapView
组件。
尝试从 MapView
组件中删除 region={this.state.region}
。
更新
还有一件事使用 await
和 setState
是完全多余的(await this.setState({ region })
)因为 setSate 不 return promise
但 undefined
.
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'});