【发布时间】:2020-05-11 22:46:55
【问题描述】:
我正在尝试使用从城市名称返回经度和纬度的地理编码定位器。这应该设置为一个州,并用于在地图上显示城市。我可以很好地获取结果,但是,当我尝试设置状态时,状态为空。
这是地图组件的代码:
import React, { useState, useEffect } from "react";
import MapGL, { GeolocateControl } from "react-map-gl";
import "mapbox-gl/dist/mapbox-gl.css";
import { OpenStreetMapProvider } from "leaflet-geosearch";
const Map = (props) => {
const [long, setLong] = useState(null);
const [lat, setLat] = useState(null);
useEffect(() => {
getCoords();
}, []);
const TOKEN =
"xxx.xxx.xxxx-xxxxx";
const [viewport, setViewPort] = useState({
width: "20%",
height: 400,
latitude: 6.122498,
longitude: 80.112597,
zoom: 12,
});
const _onViewportChange = (viewport) =>
setViewPort({ ...viewport, transitionDuration: 3000 });
const getCoords = async () => {
// setup
const provider = new OpenStreetMapProvider();
// search
const results = await provider.search({ query: props.currentCity });
console.log(results[0].x)
console.log(results[0].y)
setLong({ long: results[0].x });
setLat({ lat: results[0].y });
console.log(long);
console.log(lat)
};
return (
<div style={{ margin: "0 auto" }}>
<MapGL
{...viewport}
mapboxApiAccessToken={TOKEN}
mapStyle="mapbox://styles/mapbox/dark-v8"
onViewportChange={_onViewportChange}
></MapGL>
</div>
);
};
export default Map;
我已经预设了一些值作为纬度和经度,并依赖于控制台。日志,因此应用程序不会中断。
console.log(results[0].x)
console.log(results[0].y)
setLong({ long: results[0].x });
setLat({ lat: results[0].y });
console.log(long);
console.log(lat)
前两个日志打印的位置很好。最后两个,打印状态的初始状态,即:null。
城市名称来自道具,它来自不同的组件,它确实可以正常工作。
<Map currentCity={currentCity}/>
我很确定这很愚蠢,但我一生都无法弄清楚是什么。 该地图是一个地图框,我正在使用传单中的 OpenStreetMapProvider。
我尝试了不同的提供商,但没有成功。我很确定我在异步调用中做错了什么。我认为状态在通话结束之前设置。我尝试过使用 Promise,但没有任何改变。
谢谢。
【问题讨论】:
标签: javascript reactjs async-await