【发布时间】:2018-10-18 20:34:13
【问题描述】:
React 的初学者。 我正在尝试在 React 中找出解决这种情况的标准方法。
我正在访问一个 api,数据返回一切正常,除了我试图将数据设置为我的组件的状态,并且 render() 方法在返回任何数据之前引用状态,因此状态属性被定义为“null”。
在下面的代码示例中,您可以看到我正在登录到控制台,尽管事情的顺序,第二个日志是在将 setState 设置为 API 数据的日志之前从浏览器返回的。
任何关于尽管使用 .then() 仍会发生这种情况的帮助/解释将不胜感激。
谢谢。
PS:为简化起见,我删除了 TeamList 组件,但与“第二个日志”一样,组件在实际拉入数据之前就已呈现。
import React, { Component } from 'react';
class App extends Component {
constructor(props) {
super(props);
this.state = {
data: null,
}
}
componentDidMount() {
const uri = 'http://api.football-data.org/v2/competitions/PL/teams';
let h = new Headers()
h.append('Accept', 'application/json')
h.append('X-Auth-Token', 'XXXXXXXXXXXXXXXXXXXX')
let req = new Request(uri, {
method: 'GET',
headers: h,
mode: 'cors'
})
var component = this;
fetch(req)
.then( (response) => {
return response.json()
})
.then( (json) => {
this.setState({ data: json })
})
.then( (json) => {
console.log( 'second log', this.state.data )
})
.catch( (ex) => {
console.log('parsing failed', ex)
})
console.log( 'first log', this.state.data )
}
render() {
return (
<div>
<div className="App">
<TeamList list={this.state.data} />
</div>
</div>
);
}
}
export default App;
【问题讨论】:
-
考虑在你的状态中添加一个加载布尔值,在你的获取链末尾设置为 false。在渲染函数中使用条件语句来加载缓冲符号或其他内容,直到加载变量设置为 false。
标签: javascript reactjs api