为什么React文档建议在componentDidMount中执行AJAX,而不是componentWillMount?

Ala*_* H. 99 reactjs

标题说明了一切.我理解为什么componentDidMount适合需要DOM访问的任何东西,但AJAX请求不一定或通常需要这个.

是什么赋予了?

Bri*_*and 60

componentDidMount是副作用.添加事件侦听器,AJAX,改变DOM等.

componentWillMount很少有用; 特别是如果你关心服务器端渲染(添加事件监听器会导致错误和泄漏,以及许多其他可能出错的东西).

有关componentWillMount从类组件中删除的讨论,因为它与构造函数具有相同的用途.它将保留在createClass组件上.

  • @Alan - 如果你在客户端和服务器端使用React,你会发现`componentWillMount`中的任何内容都将在服务器端渲染上执行.如果您使用的是"componentDidMount",那么只能在客户端执行.因此,将东西放在执行外部交互或绑定到事件等的"componentWillMount"中并不是一个好主意.如果您没有计划在服务器端渲染组件,那么仅仅为了潜在的代码可移植性仍然不是一个好主意.这完全不是主要的原因,这在@daniula的回答中有所解释. (18认同)
  • componentWillMount在服务器上运行,但componentWillUnmount(删除侦听器的位置)不是.这将导致您添加侦听器,从不清理它们. (3认同)

dan*_*ula 36

我也有同样的问题.我决定尝试提出请求,componentWillMount但最终会出现各种小问题.

当ajax调用完成新数据时,我正在触发渲染.在某些时候,组件的渲染比从服务器获取响应花费的时间更多,此时ajax回调在未安装的组件上触发渲染.这是一种边缘情况,但可能更多,所以坚持下去更安全componentDidMount.

  • 这是浏览器异步世界.你永远不应该假设一个函数总是比其余函数更快.正如我已经提到它的边缘情况,可能意味着您应该优化渲染过程,但使用适当的生命周期方法将使您的生活更加轻松. (4认同)