geolib在反应原生状态下未准备好地理位置坐标

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了geolib在反应原生状态下未准备好地理位置坐标相关的知识,希望对你有一定的参考价值。

我在反应原生中使用geolib并将其与地理位置集成。我想从当前位置lat / long到另一个位置的lat / long的距离。当我这样做时,它会弹出错误:null不是一个对象(评估'point.hasOwnProperty'。有关修复的任何想法?

componentDidMount() {
navigator.geolocation.getCurrentPosition(
  (position) => {
    this.setState({
      latitude: position.coords.latitude,
      longitude: position.coords.longitude,
      error: null,
    });
  }
);
}

render() {

const lat = this.state.latitude;
const long = this.state.longitude;

let c = geolib.getDistance(
{latitude: lat, longitude: long}, //error occurs HERE
{latitude: 36.204824, longitude: 138.252924}
);

return (
    <Text>Distance: {c} kms</Text>
);
}
答案

这可能是因为以下是异步,这意味着它在已经加载其他所有内容后给出结果:

navigator.geolocation.getCurrentPosition(
  (position) => {
    this.setState({
      latitude: position.coords.latitude,
      longitude: position.coords.longitude,
      error: null,
    });
  }
);

在第一次渲染时,this.state.latitude将为null:

const lat = this.state.latitude;
const long = this.state.longitude;

尝试在render()方法的开头添加它:

if (this.state.latitude == null) return null;

这将阻止第一次渲染。它第二次呈现,this.state.latitude将准备就绪。

以上是关于geolib在反应原生状态下未准备好地理位置坐标的主要内容,如果未能解决你的问题,请参考以下文章

显示启动画面或加载指示器,直到所有图像都准备好 |世博会|反应原生

重定向后反应状态数据未准备好

反应传单地图中心没有改变

UIButton 图像在正常状态下未显示

地理位置反应原生

反应原生检查位置服务是不是在iOS上