api调用成功后更新状态
花了两天的时间阅读和研究可能导致问题的原因,但我就是不明白 我有两个API:一个是来自NASA的卫星定位API,另一个是来自GIS软件的地图图层API。我试图通过获取卫星在空间中的当前坐标来更新地图坐标。这将每1秒发射一次,并根据卫星的坐标更新地图的位置。但是,状态不会更新 代码如下:api调用成功后更新状态,api,reactjs,Api,Reactjs,花了两天的时间阅读和研究可能导致问题的原因,但我就是不明白 我有两个API:一个是来自NASA的卫星定位API,另一个是来自GIS软件的地图图层API。我试图通过获取卫星在空间中的当前坐标来更新地图坐标。这将每1秒发射一次,并根据卫星的坐标更新地图的位置。但是,状态不会更新 代码如下: let url = 'http://api.open-notify.org/iss-now.json'; class Basemap extends React.Component { construc
let url = 'http://api.open-notify.org/iss-now.json';
class Basemap extends React.Component {
constructor(props) {
super(props);
this.state = {
center: [31, 13]
};
}
componentDidMount() {
this.getCenter();
this.interval = setInterval(this.getCenter, 2000);
}
getCenter() {
fetch(url)
.then(d => d.json())
.then(d => (d) => {
this.setState({
center: [d.iss_position.latitude, + ', ' +
d.iss_position.longitude]
});
});
}
render() {
return (
<Map style={{ width: '100vw', height: '100vh' }}
mapProperties={{ basemap: 'satellite' }}
viewProperties= { this.state } />
);
}
}
export default Basemap;
let url='1〕http://api.open-notify.org/iss-now.json';
类Basemap扩展了React.Component{
建造师(道具){
超级(道具);
此.state={
中间:[31,13]
};
}
componentDidMount(){
这是getCenter();
this.interval=setInterval(this.getCenter,2000);
}
getCenter(){
获取(url)
.then(d=>d.json())
.然后(d=>(d)=>{
这是我的国家({
中心:[d.iss_位置.纬度,+','+
d、 iss_位置经度]
});
});
}
render(){
返回(
);
}
}
导出默认底图;
通过重新调用fetch函数,我成功地每秒检索卫星的更新坐标,但是地图的状态没有改变
我可能错过了什么 因为在第二秒内
。然后
返回另一个箭头函数,而不是执行setState。该函数没有被调用,这就是状态没有得到更新的原因
按如下方式编写:删除另一个箭头函数:
fetch(url)
.then(d => d.json())
.then(d => {
this.setState({
center: [....]
});
});
}
另一个问题是getCenter
在将上下文作为回调方法传递给setInterval时会丢失上下文,因此在构造函数中绑定该方法:
this.getCenter = this.getCenter.bind(this);
检查有关此语法的详细信息:()=>()=>
可能不相关,但与
+',“+
GIS Api使用以下内容定位地图:中心:[25,78]
。数字是坐标。是的,但它是一个数组,所以为什么你需要做+',“+
只是中心:[d.iss_位置.纬度,d.iss_位置.经度]
对不起,那是因为我试过一点控制台。但是,现在我得到了这个未处理的拒绝(TypeError):\u this2.setState不是一个函数。太令人沮丧了!顺便说一句,我很高兴你们这么快就给小费!您之所以会出现错误,是因为您忘记绑定getCenter
函数将此行放入构造函数:this.getCenter=this.getCenter.bind(this)
它将工作:)是的,这解决了错误!现在没有错误,但状态仍然没有更新。。。我想这将是一个不眠之夜。使用setState回调检查状态是否正在更新,如下所示:this.setState({center:[..]},()=>{console.log(this.state.center);})代码>检查值并让我知道结果。不确定坐标,州政府正在获取更新的数据。您需要研究格式以及如何显示更新的坐标:)