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

reactjs React.js

蛋蛋阿飞

2020-03-12

标题说明了一切。我知道为什么componentDidMount它适用于需要DOM访问的任何内容,但是AJAX请求不一定或通常都需要这样做。

是什么赋予了?

第1079篇《为什么React文档建议在componentDidMount中而不是componentWillMount中进行AJAX?》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

3个回答
古一达蒙 2020.03.12

componentDidMount用于副作用。添加事件侦听器,AJAX,更改DOM等。

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

讨论componentWillMount从类组件中删除组件是因为它的作用与构造函数相同。它将保留在createClass组件上。

猴子西门 2020.03.12

一开始我也遇到了同样的问题。我决定尝试提出请求,componentWillMount但最终遇到各种小问题。

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

猴子乐 2020.03.12

根据文档设置,状态componentWillMount不会触发重新渲染。如果AJAX调用没有阻塞,并且Promise成功返回一个更新组件状态的,则一旦组件被渲染,响应就有可能到达。由于componentWillMount不会触发重新渲染,因此您将不会具有预期的行为,即使用请求的数据渲染的组件。

如果您使用任何助焊剂库,并且所请求的数据最终存储在该组件已连接到(或从已连接的组件继承)的商店中,那么这将不是问题,因为该数据的接收很可能会更改道具最终。

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android