componentDidMount,getCurrentPosition延迟

时间:2017-11-13 18:21:46

标签: reactjs geolocation

我使用这样的模式来获取用户的当前位置:

componentDidMount() {
       let lat, lon;
     navigator.geolocation.getCurrentPosition(function(location) {
         lat = location.coords.latitude;
         lon = location.coords.longitude;
 });
   setTimeout(() => {
    this.setState({
      lat,
      lon
    })
    console.log(this.state.lon, this.state.lat);
 }, 1000);
     }

它实际上有效但由于setTimeout看起来“不完整”。 核心问题是在没有undefined的情况下获取位置和控制台的延迟setTimeout。 我尝试了一些其他方法来修复它但都失败了:

navigator.geolocation.getCurrentPosition(function(location) {
    this.setState({
         lat: location.coords.latitude,
         lon: location.coords.longitude
     })
 }).bind(this);
例如,

和卑微的let _this = this。 请问,setState是否有更明智的方法,基于地理定位?

1 个答案:

答案 0 :(得分:2)

如评论中所述,您可以稍微移动绑定或使用箭头功能:

componentDidMount() {
    navigator.geolocation.getCurrentPosition(function (location) {
      this.setState({
        lat: location.coords.latitude,
        lon: location.coords.longitude 
      })
    }.bind(this));

    // OR
    navigator.geolocation.getCurrentPosition(location => {
      this.setState({
        lat: location.coords.latitude,
        lon: location.coords.longitude
      })
    });
}