React 文档的这个页面显示异步请求的数据应该在componentDidMount
事件中被消耗,同时getInitialState
将状态对象初始化为默认的空状态。
有什么原因吗?也许 getInitialState 不会这样做或有不同的目的?是不是由于图书馆的某些内部逻辑?
版主和回答者请注意:这不是基于意见的问题:如果存在原因,那就是答案,但是,对我的问题的一个好的、正确的答案也可能是“不,没有任何特别的理性,做任何你感觉更好的事情”
React 文档的这个页面显示异步请求的数据应该在componentDidMount
事件中被消耗,同时getInitialState
将状态对象初始化为默认的空状态。
有什么原因吗?也许 getInitialState 不会这样做或有不同的目的?是不是由于图书馆的某些内部逻辑?
版主和回答者请注意:这不是基于意见的问题:如果存在原因,那就是答案,但是,对我的问题的一个好的、正确的答案也可能是“不,没有任何特别的理性,做任何你感觉更好的事情”
getInitialState
应该是 props 的纯函数(尽管它们经常不被使用)。换句话说,使用相同的 props getInitialState 应该返回相同的数据。
componentDidMount
允许具有动态行为,并导致诸如 dom 操作和 ajax 请求之类的副作用(这是它的主要意图)。
处理此问题的常用方法是提前返回空 div、加载消息<div>Loading</div>
) 或加载指示符(例如spinkit)。
在第一次渲染时,将显示微调器,然后最终状态用数据更新,渲染的主要部分可以运行。
render: function(){
// while loading
if (!this.state.data){
return <div className="spinner"></div>
}
// loaded, you can use this.state.data here
return <div>...</div>
}
您不想这样做,因为您的组件将等待异步请求,并且在完成之前无法安装。如果你的 html 有几个状态变量,让 react 先渲染而不是让它等待。我知道这是一种意见,但它也是关注点分离的事情。