为什么我必须 AJAX 不是在 constructor() 中而是在 componentDidMount() 中?

Why do I have to AJAX things not in constructor() but in componentDidMount()?

为什么我需要使用 componentDidMount 进行异步或 ajax?对于componentWillMount,我理解这是因为无论componentWillMount发生什么变化,都存在无法重新渲染的问题。但是对于构造函数来说,如果有变化不是要重新渲染吗?

而我以自己的方式思考的原因是,如果你在构造函数中进行异步操作,可能是因为它会花费很多第一次渲染时间,而且会花费很多时间加载页面。还有其他原因吗?

让我们假设 Api 调用发生在 Component Will mount/constructor

异步调用在 CWM/Constructor 中触发,此函数的其他行将开始执行,完成这些函数后,渲染函数将开始执行并假设渲染函数已执行 50%,在同时你从你在 CWM/constructor 中进行的异步调用得到响应,现在你将调用 setState 触发 更新周期 来更新数据但骨架 html 本身还没有准备好(因为渲染功能没有完成)数据去哪里更新?

第一次执行渲染函数完全是浪费。取而代之的是让渲染函数完成,进而构建 html 对象,然后可以更新数据。

简而言之,我们需要盖房子并搬进去,而不是我们搬到空地开始盖房子。第二个也可以,但不舒服。

从问题来看,你好像把constructor和CWM搞混了,两者没有区别,因为react在最新版本中去掉了CWM以避免冗余。