【发布时间】:2020-11-02 13:13:48
【问题描述】:
React 和 JavaScript 的初学者,如果这是一个简单的修复,请见谅。
我正在从服务器获取数据并打算解析响应并将响应的元素存储在作为状态变量的数组中,因为我想使用状态的变化来相应地更新页面。
我遇到的问题是,在使用 fetch() 时,我能够从服务器检索数据,但显然我无法正确使用 setState() 将数据分配给变量。我读过 setState() 是异步的,因此您的状态变量可能不会立即更新,在这种情况下,我想知道我是否可以在状态变量(数组)更新时呈现应用程序。
下面是我的代码:
import React, { Component } from 'react';
import './App.css';
class App extends Component{
constructor(props) {
super(props);
this.state = {
apiResponse: []
};
this.getData = this.getData.bind(this);
}
componentDidMount() {
this.getData();
}
getData = () => {
fetch('http://localhost:5000')
.then(results => results.json())
.then(console.log)
.then(results => this.setState({apiResponse: results}, () => {
console.log('data in state', this.state.apiResponse)
}))
.catch(err => console.error(err));
}
render() {
return (
<div className="App">
<h1>Display</h1>
<h1>{this.state.apiResponse}</h1>
<h1>Does this work?</h1>
</div>
);
}
}
export default App;
我在 fetch 之后运行的第一个 console.log 返回了适当的 JSON 对象,但是之后的下一个 console.log 返回一个未定义的,{this.state.apiResponse} 不呈现任何内容。
【问题讨论】:
-
删除
.then(console.log) -
你能显示你从服务器得到什么吗?
-
@panditmonium 以及你想在 UI 中显示什么?
-
@panditmonium 对于您需要调用的每个阵列
map。{this.state.apiResponse && this.state.apiResponse.map(apiRep => <div>{apiRep.recordsets.map(recordSet => <span>{recordSet.FactoryName}</span>)}</div>)}。现在无法检查所有 {} () 是否都正常 -
我想要它,以便我可以显示属于记录集 [0] 索引的所有元素。从那里,我将解析 JSON 以检索一些变量(一个是“E10StateName”)
标签: javascript reactjs fetch state render