我
React 的请求应该放在哪个生命周期中?
难度:
React 的异步请求到底应该放在哪个生命周期里,有人认为在componentWillMount
中可以提前进行异步请求,避免白屏,其实这个观点是有问题的.
由于 JavaScript 中异步事件的性质,当您启动 API 调用时,浏览器会在此期间返回执行其他工作。当 React 渲染一个组件时,它不会等待 componentWillMount 它完成任何事情 - React 继续前进并继续 render,没有办法“暂停”渲染以等待数据到达。
而且在componentWillMount
请求会有一系列潜在的问题,首先,在服务器渲染时,如果在 componentWillMount 里获取数据,fetch data 会执行两次,一次在服务端一次在客户端,这造成了多余的请求,其次,在 React 16 进行 React Fiber 重写后,componentWillMount
可能在一次渲染中多次调用.
目前官方推荐的异步请求是在componentDidmount
中进行.
如果有特殊需求需要提前请求,也可以在特殊情况下在constructor
中请求
react 17 之后
componentWillMount
会被废弃,仅仅保留UNSAFE_componentWillMount