我的 React 组件渲染了两次。所以,我决定逐行调试,问题就在这里
if ( workInProgress.mode & StrictMode) {
instance.render();
}Run Code Online (Sandbox Code Playgroud)
React-dom.development.js
是因为严格模式吗?我可以禁用它吗?什么是严格模式?我需要吗?
我有以下几点:
const RoutedApp = ({ signedIn }) => {
return (
<BrowserRouter>
<Switch>
<Route path={routes.HANDLE_SIGN_IN} render={props => <HandleSignIn {...props} />} />
<PublicRoute exact path={routes.LANDING} signedIn={signedIn} component={LandingContainer} />
<PrivateRoute exact path={routes.HOME} signedIn={signedIn} component={HomeContainer} />
<Route component={PageNotFoundContainer} />
</Switch>
</BrowserRouter>
);
};
Run Code Online (Sandbox Code Playgroud)
问题出在HandleSignInContainer.
该组件基本上只是让用户登录并将他们发送到主页location.push('/home');
但是,我遇到了HandleSignInContainer安装两次的问题。
该文档提到,在使用Routerender道具应该可以解决这个问题,但后来这个SO答案中提到,这将不是由HOC创建的组件工作。
既然HandleSignIn是用 React Redux's 包裹的connect(),我怎样才能阻止这个组件挂载两次?
尝试包装非连接组件:
const WrappedHandleSignInContainer = props => (
<div>
<HandleSignInContainer {...props} />
</div>
);
Run Code Online (Sandbox Code Playgroud)