我理解为什么componentDidMount
适合任何需要DOM访问的东西,但是AJAX请求不一定也通常不需要它。
怎么回事?
发布于 2014-11-26 08:47:22
componentDidMount
是用于副作用的。添加事件侦听器、AJAX、修改DOM等。
componentWillMount
很少有用;特别是当您关心服务器端呈现时(添加事件侦听器会导致错误和泄漏,以及许多其他可能出错的事情)。
有关于从类组件中删除componentWillMount
的讨论,因为它与构造函数具有相同的用途。它将保留在createClass
组件上。
发布于 2014-11-26 09:31:54
我在一开始也遇到了同样的问题。我决定尝试用componentWillMount
发出请求,但最终导致了各种小问题。
当ajax调用使用新数据结束时,我触发了渲染。在某些时候,组件的渲染比从服务器获取响应要花费更多的时间,在这一点上,ajax回调触发了在未挂载的组件上渲染。这是一种边缘情况,但可能还有更多情况,所以坚持使用componentDidMount
更安全。
发布于 2017-04-11 16:21:05
根据文档,在componentWillMount
中设置状态不会触发重新渲染。如果AJAX调用没有阻塞,并且您返回了一个在成功时更新组件状态的Promise
,那么一旦呈现组件,响应就有可能到达。由于componentWillMount
不会触发重新呈现,因此您将不会有预期的行为,即使用请求的数据呈现的组件。
如果您使用任何flux库,并且请求的数据最终存储在组件连接到的存储中(或从连接的组件继承),这将不会是一个问题,因为数据的接收很可能最终会改变属性。
https://stackoverflow.com/questions/27139366
复制相似问题