Reactjs 由于严格模式,我的React组件渲染了两次

Reactjs 由于严格模式,我的React组件渲染了两次,reactjs,react-dom,Reactjs,React Dom,我的React组件渲染了两次。所以,我决定逐行调试,问题就在这里 if(workInProgress.mode和StrictMode){ render(); }是的,您必须删除严格模式 严格模式无法自动检测到副作用,但它可以让副作用更具确定性,从而帮助您发现副作用。这是通过有意地双重调用以下函数来实现的:类组件构造函数、呈现和shouldComponentUpdate方法 StrictMode渲染组件两次(在开发中,而不是在生产中),以便检测代码中的任何问题并向您发出警告(这可能非常有用) 如

我的React组件渲染了两次。所以,我决定逐行调试,问题就在这里

if(workInProgress.mode和StrictMode){
render();

}
是的,您必须删除严格模式

严格模式无法自动检测到副作用,但它可以让副作用更具确定性,从而帮助您发现副作用。这是通过有意地双重调用以下函数来实现的:类组件构造函数、呈现和shouldComponentUpdate方法


StrictMode渲染组件两次(在开发中,而不是在生产中),以便检测代码中的任何问题并向您发出警告(这可能非常有用)

如果您在应用程序中启用了StrictMode,但不记得启用了它,可能是因为您最初使用create react app或类似工具创建应用程序,默认情况下会自动启用StrictMode

例如,您可能会发现您的{app}被index.js中的
包装:

  ReactDOM.render(
     <React.StrictMode>
       {app}
     </React.StrictMode>,
    document.getElementById('root')
  );

组件似乎渲染了两次,但第一个渲染的组件未卸载?至少这是我在React 17中看到的行为,可能是我的代码中的一个bug,当然

如果我可以添加,如果您继续,它将帮助您编写更具弹性的组件,帮助您更早地注意到bug。所以你并不需要它,但我们非常建议你使用它。请注意,双重渲染只在开发时发生,在生产时不会发生。@Jackyef如何删除它?或者,将我的应用程序置于生产模式
给出了一个错误。只需删除包裹在应用程序上的
,就可以了。这应该是答案。这不会在任何地方突出显示。你能分享一些react docs的参考链接吗?@manjs我恐怕是通过“艰苦的方式”学会的,不确定是否有关于它的文档。
  ReactDOM.render(
    {app}
    document.getElementById('root')
  );