PHP8.1.21版本已发布
vue8.1.21版本已发布
jquery8.1.21版本已发布

react http请求放在哪

藏色散人
藏色散人 原创
2023-01-05 09:34:07 1940浏览

react http请求应该放在componentdidmount中去操作,这是对于异步请求来说的;而对于同步的状态改变,react网络请求可以放在componentwillmount中,一般用的比较少。

本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。

react http请求放在哪?React网络请求到底该放在哪个生命周期中?

总的来说,对于异步请求,最好放在componentDidMount中去操作,对于同步的状态改变,可以放在componentWillMount中,一般用的比较少。

如果认为在componentWillMount里发起请求能提早获得结果,这种想法其实是错误的,通常componentWillMount比componentDidMount早不了多少微秒,网络上任何一点延迟,这一点差异都可忽略不计。

看看react的生命周期:

constructor() ----> componentWillMount() ----> render() ----> componentDidMount()

上面这些方法的调用是有次序的,由上而下依次调用。

constructor被调用是在组件准备要挂载的最开始,此时组件尚未挂载到网页上。

componentWillMount方法的调用在constructor之后,在render之前,在这方法里的代码调用setState方法不会触发重新render,所以它一般不会用来作加载数据之用。

componentDidMount方法中的代码,是在组件已经完全挂载到网页上才会调用被执行,所以可以保证数据的加载。此外,在这方法中调用setState方法,会触发重新渲染。所以,官方设计这个方法就是用来加载外部数据用的,或处理其他的副作用代码。与组件上的数据无关的加载,也可以在constructor里做,但constructor是做组件state初绐化工作,并不是做加载数据这工作的,constructor里也不能setState,还有加载的时间太长或者出错,页面就无法加载出来。所以有副作用的代码都会集中在componentDidMount方法里。

总结:

1.跟服务器端渲染(同构)有关系,如果在componentWillMount里面获取数据,fetch data会执行两次,一次在服务器端一次在客户端。在componentDidMount中可以解决这个问题,componentWillMount同样也会render两次。

2.在componentWillMount中fetch data,数据一定在render后才能到达,如果你忘记了设置初始状态,用户体验不好。

3.react16.0以后,componentWillMount可能会被执行多次。

推荐学习:《react视频教程

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。