javascript - 为什么我必须在 componentDidMount() 中而不是在 constructor() 中进行 AJAX 操作?

标签 javascript ajax reactjs lifecycle

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

我以自己的方式思考这个问题的原因是,如果你在构造函数中进行异步,这可能是因为它会花费大量的首次渲染时间,并且将花费大量的时间来加载页面。还有其他原因吗?

最佳答案

假设 Api 调用发生在组件将挂载/构造函数中

异步调用在 CWM/Constructor 中触发,该函数的其他行将开始执行,一旦这些函数完成,渲染函数将开始执行并假设渲染函数的 50% 已执行,同时您得到您在 CWM/构造函数中进行的异步调用的响应,现在您将调用 setState 来触发更新周期来更新数据,但框架 html 本身尚未准备好(因为渲染函数尚未完成) )数据将去往何处并更新?

这完全浪费了渲染函数的第一次执行。相反,让渲染函数完成,然后构造 html 对象,然后可以更新数据。

简单来说,我们需要 build 房子并搬进去,而不是我们搬到空地并开始 build 房子。第二种也可以,但不太舒服。

从问题来看,看来你对构造函数和CWM感到困惑,两者没有区别,因为react在最新版本中删除了CWM以避免冗余。

关于javascript - 为什么我必须在 componentDidMount() 中而不是在 constructor() 中进行 AJAX 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56965318/

相关文章:

javascript - 属性值不通过对象字面量定义应用

javascript - Vue.js "Maximum call stack size exceeded"错误。将数据从 parent 传递给 child 失败

java - 使用 AJAX 和 Spring Boot 下载文件

javascript - AJAX getElementsByClassName 获取元素

reactjs - Material UI withStyles : Invalid prop `component` of type `object` supplied to `Route` , 预期 `function`

reactjs - 使用 create-react-app 时使用自定义构建输出文件夹

javascript - 为什么js设置frame src不显示显示源?

javascript - jQuery:在尝试选择动态创建的跨度时被难住了

javascript - ajax添加后检查div是否有特定文本

javascript - Axios 'put' 请求将数组作为空值传递