javascript - 在第一次尝试时反应本机地理编码而不是渲染数据
问题描述
我正在使用 Expo 构建带有 React 本机的 Android 应用程序。我的用户会写地址,我必须找到它的坐标才能在地图上显示路线。
正如我所见,它工作正常,但不是第一次尝试。当我按下导航到 MapScreen 的按钮时,会生成正确的值,但不会在屏幕上呈现。
当我返回并再次尝试而不进行任何更改时,它将呈现。
为什么只在第二次尝试呈现数据?是在渲染后调用了 Geocoder 函数还是有什么问题?
import MapView, { Marker } from "react-native-maps";
import MapViewDirections from "react-native-maps-directions";
import React, {useState, useEffect} from 'react';
import * as Location from 'expo-location'
import {Alert, StatusBar, StyleSheet, Text, View} from 'react-native';
import { mapStyles } from '../Styles';
import Geocoder from 'react-native-geocoding';
var distance = 0;
var originDir = {
longitude : null,
latitude : null,
};
var destinationDir = {
longitude: null,
latitude: null,
};
const GOOGLE_MAPS_APIKEY = '';
Geocoder.init(GOOGLE_MAPS_APIKEY);
function getDistance(param){
distance = param;
}
const showMapScreen = ({route, navigation}) => {
const {origin} = route.params;
Geocoder.from(origin)
.then(json => {
var destination = json.results[0].geometry.location;
destinationDir.longitude = destination.lng;
destinationDir.latitude = destination.lat;
})
.catch(error => console.log(error));
const [location, setLocation] = useState(null);
const [errorMsg, setErrorMsg] = useState(null);
useEffect(() => {
(async () => {
var { status } = await Location.requestForegroundPermissionsAsync();
if (status !== 'granted') {
setErrorMsg('Permission to access location was denied');
return;
}
var location = await Location.getCurrentPositionAsync({});
setLocation(location);
originDir.longitude = location.coords.longitude;
originDir.latitude = location.coords.latitude;
})();
}, []);
return (
<View style={mapStyles.container}>
<MapView style={[StyleSheet.absoluteFillObject, {elevation:-1, position:"absolute"}]} initialRegion={{longitude : originDir.longitude, latitude : originDir.latitude, latitudeDelta:0, longitudeDelta:0}} provider={MapView.PROVIDER_GOOGLE}>
<MapViewDirections strokeWidth = {5} strokeColor="blue" lineDashPattern={[1]} origin={originDir} destination={destinationDir} apikey = {GOOGLE_MAPS_APIKEY} onReady={result => {getDistance(result.distance)}}></MapViewDirections>
<Text style={{top:100, elevation:1, position:"absolute", width:70, height:40, fontSize:20}}>Distance: {distance} km</Text>
</MapView>
<StatusBar style="auto"></StatusBar>
</View>);
}
export {showMapScreen};
感谢您的回复!
解决方案
推荐阅读
- javascript - React-Native onSubmitEditting 花费太多时间来执行功能
- arrays - 推断元组数组中的类型
- laravel - 登录后如何在laravel中为两个不同的守卫重新生成不同的会话?
- java - onClick 自定义 CardView 上的按钮
- reactjs - 需要帮助映射 Firebase 查询结果以用于 FlatList 分页
- video-streaming - 用于直播视频和聊天的媒体服务器
- python - 汇总相关概率
- yaml - 如何将多行字符串保存到 YAML 文件?
- node.js - 如何从 url 加载图像,然后将其添加到 IPFS?
- npm - 当我输入时, npm run start 我收到此错误?