为什么反应组件会渲染两次?

时间:2017-06-19 18:46:50

标签: javascript reactjs

我已经在组件的渲染中放置了调试器,并且看到它有时会运行两次,如果不是大部分时间的话。是因为第一个渲染是在组件接收任何道具之前吗?第二次收到它的时候?我认为组件经历了安装,接收道具,然后渲染的生活方式?还是挂载,渲染,检查道具,然后重新渲染?

2 个答案:

答案 0 :(得分:4)

如果组件具有初始道具,则不会重新渲染。它重新渲染的唯一原因是它是在初始渲染后接收道具,还是正在改变状态。

答案 1 :(得分:0)

my previous question中,我遇到一个问题,并引述:

” ... ...我知道这些功能中的大多数(可能还有更多)都可以在功能组件中使用(大多数由钩子介绍),但是它们并不能按我的预期工作,因为它们并不完全相同,像useEffect(() => {code}, [])可以代替componentDidMount()在安装后它在我开发的任何应用中都会渲染两次,传递错误的数据...“


对此问题,CertainPerformance回答:

“ ...听起来像您已启用严格模式,并且正在执行带有副作用的操作,应该避免这种情况。您可能只需要找出正确的方法来构造代码即可功能组件-在功能组件中,几乎所有您想做的事情都可以相当优雅地完成,尽管不是绝对所有...“


这促使我进行了一些研究并找到了有趣的答案:

这是StrictMode的故意功能。这仅在开发过程中发生,并有助于发现进入渲染阶段的意外副作用。我们只对具有Hooks的组件执行此操作,因为这些组件很可能在错误的地方意外地产生了副作用。

您可以在GitHub上了解有关此内容的更多信息。