【发布时间】:2017-07-29 21:42:54
【问题描述】:
我正在尝试创建一个简单的应用程序来加载谷歌地图(使用 airbnb 的 react-native-maps 库)并显示用户的当前位置。我看到的是地图总是显示默认的初始位置,而不是在获取用户位置后重新渲染。
我正在使用 React 0.42 并且仅在 iOS 上进行测试。这里有一些代码需要澄清:
1.) 我设置了一个初始状态
state = {
region: {
latitude: 52,
longitude: 5,
latitudeDelta: 0.0922,
longitudeDelta: 0.0421
}
}
2.) 我在 componentDidMount 中获取用户的位置
componentDidMount() {
navigator.geolocation.getCurrentPosition(
(position) => {
this.setState({
region: {
latitude: position.coords.latitude,
longitude: position.coords.longitude,
latitudeDelta: 0.01,
longitudeDelta: 0.0011
}
});
},
(error) => alert(JSON.stringify(error)),
{enableHighAccuracy: true, timeout: 20000, maximumAge: 1000}
);
}
3.) 使用渲染时,我会显示带有初始区域的地图,并希望在获取用户位置后该区域会发生变化
render() {
return (
<View style={{ flex: 1 }}>
<View style={{backgroundColor: 'coral', height: 70, justifyContent: 'center', alignItems: 'center'}}>
<Text>
<Text>longitude: {this.state.region.longitude}</Text>
<Text>latitude: {this.state.region.latitude}</Text>
</Text>
</View>
<View style={styles.container}>
<MapView
provider={PROVIDER_GOOGLE}
style={styles.map}
initialRegion={this.state.region}
region={this.state.region}
onRegionChange={this.onRegionChange}
onRegionChangeComplete={this.reloadEntities}
/>
</View>
</View>
);
}
这里是onRegionChange,只是用新区域更新状态,我相信这会导致重新渲染
onRegionChange = (region) => {
this.setState({ region });
}
注意:经度和纬度文本值会随着地图上区域的变化而更新,并且一旦获取用户的位置,它们就会更新。
所以我有点困惑,为什么地图在获取用户位置后不会改变它所显示的内容。任何帮助将不胜感激!
更新:我查看了这个帖子:https://github.com/airbnb/react-native-maps/issues/43,它似乎主要围绕 Android 展开,但我确实尝试删除 enableHighAccuracy 选项,但没有成功。
【问题讨论】:
标签: react-native react-native-maps