我已经在组件的渲染中放置了调试器,并且看到它有时会运行两次,如果不是大部分时间的话。是因为第一个渲染是在组件接收任何道具之前吗?第二次收到它的时候?我认为组件经历了安装,接收道具,然后渲染的生活方式?还是挂载,渲染,检查道具,然后重新渲染?
答案 0 :(得分:4)
如果组件具有初始道具,则不会重新渲染。它重新渲染的唯一原因是它是在初始渲染后接收道具,还是正在改变状态。
答案 1 :(得分:0)
在my previous question中,我遇到一个问题,并引述:
” ... ...我知道这些功能中的大多数(可能还有更多)都可以在功能组件中使用(大多数由钩子介绍),但是它们并不能按我的预期工作,因为它们并不完全相同,像
useEffect(() => {code}, [])
可以代替componentDidMount()
,在安装后它在我开发的任何应用中都会渲染两次,传递错误的数据...“
对此问题,CertainPerformance回答:
“ ...听起来像您已启用严格模式,并且正在执行带有副作用的操作,应该避免这种情况。您可能只需要找出正确的方法来构造代码即可功能组件-在功能组件中,几乎所有您想做的事情都可以相当优雅地完成,尽管不是绝对所有...“
这促使我进行了一些研究并找到了有趣的答案:
这是StrictMode的故意功能。这仅在开发过程中发生,并有助于发现进入渲染阶段的意外副作用。我们只对具有Hooks的组件执行此操作,因为这些组件很可能在错误的地方意外地产生了副作用。
您可以在GitHub上了解有关此内容的更多信息。