react 中在componentDidMount中进行网络请求的原因

1, 在constructor请求

组件未挂载也可以发送请求,这里所影响的时间只有执行发送请求的时间,然后组件接着渲染,等异步数据返回后,再执行 setState 然后render重新渲染

constructor执行一次没错 但是网络请求是异步的  先用默认值渲染  网络请求回来后setState 后重新render

2,componentWillMount请求

原理跟constructor是一样的,所影响的时间只有执行发送请求的时间,并不会阻塞组件的渲染,但不推荐使用 componentWillMount 是有其他的原因:

  1. 很重要的一点,React16.3后将会废弃掉componentWillMount、componentWillReceiveProps 以及 componentWillUpdate 三个周期函数

  2. 跟服务端渲染有关系(同构),如果在 componentWillMount 里获取数据,fetch data会执行两次,一次在服务端一次在客户端,使用 componentDidMount 则没有这个问题----暂不理解。

  3. 可能被调用不止一次

至于前面说到的数据在组件挂载前返回导致不生效的,这种情况并不会发生,

因为 setState 是将更新的状态放进了组件的__pendingStateQueue队列中,react并不会立即响应更新,会等到组件挂载完成后,再统一更新组件

setState 是异步的)

注意:

1 设置默认值 

2页面数据发生闪动 (默认值->网络请求回来的值)

总结:

  1. 数据获取可以放在 constructor 或者 componentDidmount 中, 但是为了更好的代码规范和可读性,建议统一放在 componentDidmount

  2. 对于首次render没有数据,可能导致出错的。可以设置一个initial state,或者增加一个loading状态。

posted @ 2024-05-10 17:41  青橙娃娃  阅读(54)  评论(0编辑  收藏  举报