我的 React 组件渲染了两次。所以,我决定逐行调试,问题就在这里
if ( workInProgress.mode & StrictMode) {
instance.render();
}
React-dom.development.js
是因为严格模式吗?我可以禁用它吗?什么是严格模式?我需要吗?
我的 React 组件渲染了两次。所以,我决定逐行调试,问题就在这里
if ( workInProgress.mode & StrictMode) {
instance.render();
}
React-dom.development.js
是因为严格模式吗?我可以禁用它吗?什么是严格模式?我需要吗?
StrictMode 渲染组件两次(在开发上而不是生产上)以检测您的代码中的任何问题并警告您(这可能非常有用)。
如果您在应用程序中启用了 StrictMode 但不记得启用它,可能是因为您最初使用 create-react-app 或类似方法创建应用程序,默认情况下会自动启用 StrictMode。
例如,您可能会发现您的 {app} 被包裹<React.StrictMode>
在您的 index.js 中:
ReactDOM.render(
<React.StrictMode>
{app}
</React.StrictMode>,
document.getElementById('root')
);
如果是这样,您可以通过删除<React.StrictMode>
标记来禁用 StrictMode :
ReactDOM.render(
{app}
document.getElementById('root')
);
是的,您必须删除严格模式
严格模式无法自动为您检测副作用,但它可以通过使它们更具确定性来帮助您发现它们。这是通过有意重复调用以下函数来完成的:类组件构造函数、render 和 shouldComponentUpdate 方法。
似乎组件渲染了两次,但第一个渲染的组件没有卸载?至少这是我在 React 17 中看到的行为,当然可能是我代码中的一个错误