有人认为 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