当前位置: 首页 > 面试题库 >

在React中使用componentWillMount或componentDidMount生命周期函数进行异步请求

郭瀚海
2023-03-14
问题内容

我正在阅读反应生命周期,并感到有些困惑。一些建议使用componentWillMount进行ajax调用:

https://hashnode.com/post/why-is-it-a-bad-idea-to-call-setstate-immediately-
after-componentdidmount-in-react-
cim5vz8kn01flek53aqa22mby

在componentDidMount中调用setState将触发另一个render()调用,这可能导致布局混乱。

在其他地方说不要在componentWillMount中放置ajax调用:

https://medium.com/@baphemot/understanding-reactjs-component-life-
cycle-823a640b3e8d

…此函数可能最终在调用初始渲染之前被多次调用,因此可能导致触发多个副作用。由于这个事实,不建议将此功能用于引起任何副作用的操作。

哪个是正确的?


问题答案:

React docs建议使用componentDidMount发出网络请求

componentDidMount()挂载组件后立即调用。需要DOM节点的初始化应该在这里进行。如果需要从远程端点加载数据,这是实例化网络请求的好地方。

调用setState()此方法将触发额外的渲染,但是可以保证在同一刻度内刷新。这样可以保证,即使render()在这种情况下将调用两次,用户也不会看到中间状态。

根据情况componentWillMount

编辑:

这个生命周期废弃了,因为v16.3.0的反应,并且不再鼓励usage.However其重命名为UNSAFE_componentWillUpdate和至少预计工作到
V17 的反应

v16.3.0之前

在呈现发生之前,将不会返回异步调用以获取数据。这意味着组件将使用空数据至少渲染一次。

无法“暂停”渲染以等待数据到达。您不能componentWillMountsetTimeout某种方式退还诺言或争执。处理此问题的正确方法是设置组件的初始状态,以使其对渲染有效。

把它们加起来

实际上,componentDidMount由于两个原因,这是发出调用以获取数据的最佳位置:

  • 使用DidMount可以清楚地表明,只有在初始渲染之后才会加载数据。这提醒您正确设置初始状态,以免最终undefined导致出现错误的状态。
  • 如果您需要在服务器上呈现您的应用程序,componentWillMount则实际上会被调用两次-一次在服务器上,再一次在客户端上-这可能不是您想要的。放入数据加载代码 componentDidMount将确保仅从客户端获取数据。


 类似资料:
  • 我正在阅读react lifecycle,有点困惑。有些人建议使用componentWillMount进行ajax调用: https://hashnode.com/post/why-is-it-a-bad-idea-to-call-setstate-immediately-after-componentdidmount-in-react-cim5vz8kn01flek53aqa22mby 在com

  • 本文向大家介绍react生命周期函数相关面试题,主要包含被问及react生命周期函数时的应答技巧和注意事项,需要的朋友参考一下 这个问题要考察的是组件的生命周期 一、 初始化阶段: Constructor初始化状态 componentWillMount:组件即将被装载、渲染到页面上 render:组件在这里生成虚拟的DOM节点 componentDidMount:组件真正在被装载之后 二、 运行中

  • vue中,假如子组件在created发送了一个异步请求,父组件在mouted内发送一个异步请求,如何保证父组件在异步请求后能够拿到子组件异步数据。也就是说我希望在子组件和父组件异步都结束后拿到两者的值做一些操作,请问这个有什么比较好的办法嘛。

  • 忽视省略(elision)情况,带上生命周期的函数签名(function signature)有一些限制: 任何引用都必须拥有标注好的生命周期。 任何被返回的引用都必须有一个和输入量相同的生命周期或是静态类型(static)。 另外要注意,若会导致返回的引用指向无效数据,则返回不带输入量的引用是被禁止的。下面例子展示了一些带有生命周期的函数的有效形式: // 一个拥有生命周期 `'a` 的输入引用

  • 问题内容: 在哪里进行调用将使我的状态失水的API调用的最佳位置是哪里?构造函数或生命周期方法之一,例如ComponentWillMount? 问题答案: 最好从生命周期方法进行api调用,反应文档也建议相同。 根据DOC: componentDidMount: 挂载组件后立即调用componentDidMount()。需要DOM节点的初始化应该在这里进行。 如果需要从远程端点加载数据,这是实例化

  • 主要内容:挂载,更新,卸载,实例,实例,React 实例,React 实例在本章节中我们将讨论 React 组件的生命周期。 组件的生命周期可分成三个状态: Mounting(挂载):已插入真实 DOM Updating(更新):正在被重新渲染 Unmounting(卸载):已移出真实 DOM 挂载 当组件实例被创建并插入 DOM 中时,其生命周期调用顺序如下: : 在 React 组件挂载之前,会调用它的构造函数。 : 在调用 render 方法之前调用,并且在初始挂