【发布时间】:2018-12-28 13:38:07
【问题描述】:
在ComponentWillMount 中,我正在使用 Superagent 从 Node.js 获取数据。
componentWillMount() {
request.get("/appData").end((error, response) => {
if (!error && response) {
this.setState({ dataJSON: response.body });
} else {
console.log("There was an error fetching server", error);
}
});
}
此数据保存在 this.state.dataJSON 中,以便在 render() 中呈现。
问题是render() 在setState() 生效之前被调用。
但是一旦setState() 更新了 dataJSON 的状态,就会再次调用渲染并渲染数据。
所以我问你一个解决方案,等待 dataJSON 的更新,以便仅在 dataJSON 更新时调用渲染。
【问题讨论】:
-
为什么不在尚未获取数据时简单地显示一种加载图标?延迟渲染将显示一个空白页面。
-
这是一个很好的解决方案,但我什至不知道该怎么做。
-
假设您在构造函数中将
state.dataJSON初始化为null。然后在你的渲染中,你可以这样做:if (this.state.dataJSON===null) { return <div>Loading</div> } else { return <div>Your data</div> } -
是的,这就是我刚刚所做的,我会采用这个解决方案!谢谢
标签: reactjs request state wait superagent