1. 首页
  2. 编程面试题
  3. 前端
  4. React

在React中网络请求应该放在哪个生命周期中发起?



有人认为 React 中的网络异步请求,应该放在 `componentWillMount` 这个生命周期函数中发起,这样可以提前进⾏异步请求,以避免⽩屏现象。其实这个观点是有问题的。

由于 JavaScript 中异步事件的性质,当进行异步 API 调⽤时,浏览器会在此期间继续执⾏其他⼯作。因此,当 React 渲染⼀个组件时,它并不会等待 `componentWillMount` 执行完成任何事情,而是继续往前执行并继续做 `render` ,没有办法 “暂停” 渲染以等待远程数据的返回。

⽽且,在 `componentWillMount` 中发起请求会存在⼀系列潜在问题:

- 在用 React 作为服务器渲染(SSR)时,如果在 `componentWillMount` 中进行数据的获取,则 `fetch data` 会执⾏两次:⼀次在服务端,⼀次在客户端,这就造成了多余的请求
- 在 React 16 使用 React Fiber 架构重写后,`componentWillMount` 可能会在⼀次渲染中被多次调⽤。

**⽬前官⽅推荐的是在 `componentDidmount` 中进行异步请求。**

如遇到特殊需求,需要提前进行数据的请求,可考虑采用在 `constructor` 中进行。

另外,由于在 React 17 之后 `componentWillMount` 被废弃仅保留 `UNSAFE_componentWillMount`,所以要慎用该生命周期。

发布者:admin,如若转载,请注明出处:https://ai1024.vip/39224.html

QR code
//