为什么react组件渲染两次?

IT技术 javascript reactjs
2021-05-02 03:38:17

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

2个回答

如果组件具有初始props,则不会重新渲染。它会重新渲染的唯一原因是它是否在初始渲染后接收props,或者如果您正在更改状态。

我之前的问题中,我遇到了一个问题,我引用了:

“ ...我知道这些功能中的大多数(可能还有更多)在功能组件中可用(大多数由钩子引入),但它们也不能按我的意图工作,因为它们不完全相同,就像useEffect(() => {code}, [])众所周知的那样替换componentDidMount()安装后它会在我开发的任何应用程序中呈现两次,传递错误数据......”


针对这个问题,CertainPerformance回复:

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


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

这是 StrictMode 的一个有意特性。这仅发生在开发中,并有助于发现进入渲染阶段的意外副作用。我们只对带有 Hook 的组件执行此操作,因为它们更有可能在错误的地方意外产生副作用。

您可以在GitHub 上阅读更多相关信息