即使React文档另有建议,componentDidMount也会显示中间状态

时间:2019-06-26 18:01:38

标签: reactjs

第一个前提:

  

componentDidMount()在安装组件(插入树中)后立即被调用。

第二前提:

  

您可以立即在componentDidMount()中调用setState()。它会触发额外的渲染,但是会在浏览器更新屏幕之前发生。这样可以保证即使在这种情况下render()将被调用两次,用户也不会看到中间状态。

两者均来自https://reactjs.org/docs/react-component.html#componentdidmount

我的结论:

基于上述内容,安装不能成为向浏览器显示的最后一步,否则将始终显示componentDidMount之前呈现和安装的内容(任何中间状态)。


但是,根据我的经验,我发现在componentDidMount中任何覆盖状态更改之前,实际上都会显示出构造函数中指定的任何状态。

这向我暗示前提2不正确。因此,我的结论也是不正确的。安装必须是显示在浏览器中的最后一步。

有人可以帮我清理这个吗?

1 个答案:

答案 0 :(得分:1)

我相信,如果您在componentDidMount中同步设置状态,则新状态将是唯一显示的状态(或者至少在渲染后切换如此之快,无法检测到)。

如果您尝试异步设置它(例如使用提取中的结果),那么您将看到初始状态,直到异步调用完成。