Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
api调用成功后更新状态_Api_Reactjs - Fatal编程技术网

api调用成功后更新状态

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

花了两天的时间阅读和研究可能导致问题的原因,但我就是不明白

我有两个API:一个是来自NASA的卫星定位API,另一个是来自GIS软件的地图图层API。我试图通过获取卫星在空间中的当前坐标来更新地图坐标。这将每1秒发射一次,并根据卫星的坐标更新地图的位置。但是,状态不会更新

代码如下:

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);})检查值并让我知道结果。不确定坐标,州政府正在获取更新的数据。您需要研究格式以及如何显示更新的坐标:)