我们都很清楚,render不是一个很好的处理获取数据或者任何异步操作的位置,它在某种程度上会更改状态或者导致一些其他影响
componentWillMount
React会在组件第一次执行render方法前执行这个方法,乍一看它时处理获取数据逻辑的很完美的地方。但是我们一般都是通过异步请求API的方式来获取数据,这就意味着我们还没有获取到数据而render方法已经被执行了。我们没有办法暂停render的执行而依次来等待数据的到来。
componentDidMount
componentDidMount实在render被执行之后执行的,实际上componentDidMount时最好的获取数据的位置。原因如下:
- componentDidMount是在组件初始化后才被执行的,这就需要我们正确的初始化state.否则将会出错
- 如果你需要在服务器端渲染应用程序,componentWillMount将被调用两次。一次是在server端,一次在客户端,但这并不是你想要的结果而将数据加载逻辑放在componentDidMount将确保数据只从客户端获取