为什么异步请求应该在componentDidMount中而不是在ReactJS中的getInitialState中进行?

mat*_*apu 20 javascript reactjs

这个阵营的文档的页面显示异步请求的数据应在消耗componentDidMount事件,而getInitialState初始化状态对象为默认状态.

这有什么理由吗?也许getInitialState不会这样做或有不同的目的?这是由于图书馆的一些内部逻辑吗?

主持人和回答者的注意事项:这不是一个基于意见的问题:如果存在某种原因,那将是答案,但是,对我的问题的一个好的,正确的答案也可以是"不,没有任何特别的理由,做任何你感觉更好的事情"

Bri*_*and 11

getInitialState应该是一个纯粹的道具功能(虽然他们经常不使用).换句话说,使用相同的道具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>
}
Run Code Online (Sandbox Code Playgroud)