一、
问题:
数据从接口获得了,但是输出在写数据之前发生
方法:
代码与服务器交互有时延,nodejs是非阻塞式的异步IO,所以this.state.teams和markedTeams的输出要写出回调函数,或者直接跟在then后面
getTeamList() {
$.get('http://rapapi.org/mockjsdata/24695/queryTeams?userName=a%40a.a').
then((data) => {
//console.log(data)
const team = data.data.teams
var markTeam = [];
team.map(function (item) {
if(item.isStared)
markTeam.push(item);
})
console.log(team)
this.setState({
teams: team,
markedTeams: markTeam,
})
}).then(()=>{console.log("GET teams: "+this.state)})
}
二、setState的同步更新
react中的setState特点:
是异步操作函数;
组件在还没有渲染之前, this.setState 还没有被调用;
批量执行 State 转变时让 DOM 渲染更快(相对比一个一个的setState的来的快)。
方法:
1.
setState支持回调函数
第一个参数是我们要设置的state,第二个参数是在状态更新完毕后的回调操作
2.
async 表示这是一个async函数,await只能用在这个函数里面。
await 表示在这里等待promise返回结果了,再继续执行。
await 后面跟着的应该是一个
getTeamList() {
handleMark=()=>{
console.log(this.state)
//setState的回调
this.setState({
inMarkedTeam: !this.state.inMarkedTeam,
},()=>{
console.log(this.state)
});
//this.handleTeamMark(index);//调用父节点teamlist的方法
}
关于setstate同步更新的参考链接
http://www.cnblogs.com/zhuotiabo/p/6265172.html