标题说明了一切。我理解为什么componentDidMount
适用于任何需要DOM访问的东西,但AJAX请求不一定或通常不需要。
是什么给出了?
答案 0 :(得分:60)
componentDidMount
用于副作用。添加事件监听器,AJAX,改变DOM等。
componentWillMount
很少有用;特别是如果你关心服务器端渲染(添加事件监听器会导致错误和泄漏,以及许多其他可能出错的东西)。
有关于从类组件中删除componentWillMount
的讨论,因为它与构造函数的作用相同。它将保留在createClass
组件上。
答案 1 :(得分:36)
我一开始也有同样的问题。我决定尝试在componentWillMount
中提出请求,但最终会出现各种小问题。
当ajax调用完成新数据时,我正在触发渲染。在某些时候,组件的渲染比从服务器获取响应花费的时间更多,此时ajax回调在未安装的组件上触发渲染。这是一种边缘情况,但可能更多,因此坚持componentDidMount
更安全。
答案 2 :(得分:3)
根据文档设置,componentWillMount
中的状态不会触发重新呈现。
如果AJAX调用没有阻塞,并且您返回一个Promise
,它会在成功时更新组件的状态,一旦组件被渲染,响应就有可能到来。
由于componentWillMount
不会触发重新渲染,因此您将无法获得预期的行为,即使用请求的数据呈现的组件。
如果您使用任何磁通库并且所请求的数据最终存储在存储中,组件连接到(或从连接的组件继承),这不会成为问题,因为接收该数据很可能,最终改变道具。