【发布时间】:2020-11-01 18:39:17
【问题描述】:
我正在使用 js 的地理定位 API 来获取坐标。 long 和 lat 值正在设置。我通过 console.log 检查了状态变量经度和纬度,尽管调用了 setState。
import React from 'react';
class Weather extends React.Component{
constructor(props){
super(props)
this.state = {
longitude : '',
latitude : ''
}
}
componentDidMount(){
var long = 'a';
var lat = 'b';
var a = function(pos){
long = pos.coords.longitude
lat = pos.coords.latitude
}
navigator.geolocation.getCurrentPosition(a);
this.setState({
longitude: long,
latitude: lat
})
}
render(){
return (
<div className="container">
<div className="city">
<h1>City Name</h1>
<h3>lon:{this.state.longitude}</h3>
<h3>{this.state.latitude}</h3>
</div>
<div className="icon">
</div>
</div>
)
}
}
export default Weather
【问题讨论】:
-
好吧,你没有在你的代码中显示控制台日志,这绝对是关键,位置。 setState 是异步的,当你尝试记录它时它可能还没有准备好
-
getCurrentPosition()是 异步 。就像你不能在送达之前吃披萨一样,你也不能访问尚未收到的数据 -
状态变量在 React 组件的下一个渲染周期中更新。检查here。您可能在方法
componentDidMount()中使用控制台日志,它不会在设置后立即显示更新的值。在componentDidUpdate()方法中添加控制台日志,您将看到更新后的状态变量值。 -
你建议我应该怎么做来设置经度和纬度?
-
@dhruvtailor,最可能的方法是让您的
componentDidMount异步,然后等待地理位置。
标签: javascript reactjs