【发布时间】:2021-03-29 14:59:30
【问题描述】:
我正在尝试获取天气应用的用户位置,但日志返回未定义
const [lat, setLat] = useState();
const [long, setLong] = useState();
useEffect(() => {
const handleLocation = () => {
navigator.geolocation.getCurrentPosition((position) => {
setLat(position.coords.latitude);
setLong(position.coords.longitude);
});
console.log(lat);
console.log(long);
};
if (navigator.geolocation) {
navigator.permissions.query({ name: 'geolocation' }).then(function (result) {
if (result.state === 'granted') {
console.log(result.state);
handleLocation();
} else if (result.state === 'prompt') {
console.log('prompt');
} else if (result.state === 'denied') {
console.log('Denied');
}
});
}
}, [lat, long]);
我获得了日志,确认浏览器授予了该位置,但随后我得到了未定义的纬度和经度
【问题讨论】:
-
你传递的函数:
(position) => { ... }在你的 console.log()s 之后运行。确定位置需要一些时间,并且浏览器不应该在等待期间挂起,这就是为什么你必须首先传递一个回调函数。设置状态也是异步的,所以即使没有获取到位置,你仍然会得到undefined。
标签: javascript reactjs geolocation