/login
と/forgotpassword
のようないくつかのセッションルートがあります。私はこれらのルートをSessionContainer
にラップします。残りの経路はMainAppContainer
です。私のアプリは次のようになります。アプリのコンテナでコンテナのルートにリダイレクトすると、子コンポーネントはレンダリングされません。
<Provider store={store}>
<Router>
<div className="App" >
<ProgressBar />
<MuiThemeProvider theme={theme}>
<div>
<div id="container">
<Switch>
<SessionContainer>
<Route exact path="/login" component={Login} />
<Route exact path="/forgotpassword" component={ForgotPassword} />
</SessionContainer>
<MainAppContainer>
<Route exact path="/" component={Home} />
</MainAppContainer>
</Switch>
</div>
</div>
</MuiThemeProvider>
</div>
</Router>
</Provider>
、私は、ユーザーが自分のReduxの状態にあるかどうかをチェックし、trueの場合、アプリケーションにユーザーをリダイレクトします。アプリのコンテナで、ユーザーがいない場合はログインするように再調整します。例(私のアプリのコンテナ):私は、ログインせずにアプリに行けば
const MainAppContainer = ({ children, user }) => {
if (user) {
return (<div>
<Sidebar />
<MainContainer>
<UserMenu />
<InnerContainer>
{children}
</InnerContainer>
</MainContainer>
</div>);
}
return <Redirect to="/login" />;
};
問題があり、意図したとおりにリダイレクトが発生したものの、セッションのみコンテナがロードされます。子コンポーネントはロードされません。なぜこれが起こっているのか?
また、パスが一致する場合にのみリダイレクトを試みました。それでも、子コンポーネントはロードされません。私がページに直接行くと、すべてがロードされます。リダイレクト場合でも、子コンポーネントは表示されません:私はサンドボックス(https://codesandbox.io/s/github/THPubs/react-router-multiple-containers)で問題を再現しようとしましたが、そこに時々エラーが来るが、時にはそれはないでしょう
const MainAppContainer = ({ children, user, location }) => {
if (user) {
return (<div>
<Sidebar />
<MainContainer>
<UserMenu />
<InnerContainer>
{children}
</InnerContainer>
</MainContainer>
</div>);
}
if (location.pathname !== '/login') {
return <Redirect to="/login" />;
}
return null;
};
const mapStateToProps = (state) => {
const { user } = state.session;
return {
user
};
};
export default connect(mapStateToProps)(withRouter(MainAppContainer));
。ここにコードを追加しました:https://github.com/THPubs/react-router-multiple-containers。
クローンできる場合は、yarn install
とyarn start
と表示されます。 /login
にアクセスしてください。 2つのタイトルが表示されます。次に/
に移動します。それは/login
にリダイレクトされ、ログインと言うタイトルはそこにはありません。コードを準備するとき、私はreduxを付けるときだけ起こることに気づいた!
おかげで、私はそのようなコンテナを変更したが、まだそれは働いていません。ページを直接読み込むと、コンテンツが読み込まれます。しかし、リダイレクトのためにページにアクセスすると、子どもは読み込まれません。 – THpubs
改訂コードを共有できますか? – Win
改訂されたコードを追加しました:-) – THpubs