reactjs - 嵌套条件路由渲染
问题描述
如何在路由用户之前包含另一个条件检查?在我的示例中,如果isLoading
是false
,我想渲染下面的所有路线,但我也想检查tokenValid
一些特定路线是否。
if (!isLoading) {
return (
<MuiThemeProvider theme={theme}>
{
showConnectionWarning &&
<ConnectionWarning isOnline={isOnline} />
}
<Switch>
<Route path="/authverify/:token" component={Login} />
{/* Logged in forwards redirect */}
{loggedIn && (
<Redirect exact from="/" to={authRedirectTarget} />
)}
{/* Login */}
<Route exact path="/" component={Login} />
<Route path="/signup" component={Login} />
<Route path="/signup-info/:token" component={Login} />
{/* Non-auth redirect */}
{!loggedIn && (
<Redirect
to={{ pathname: '/', state: { from: location } }} />
)}
{tokenValid && (
<Route exact path="/releases" component={ReleasesView} />
<Route path="/playlists/:id" component={PlaylistDetail} />
<Route path="/playlists" component={Playlist} />
<Route path="/account" component={AccountView} />
)}
<Route
path="/search/:category?/:profile?"
component={Search} />
<Route component={Fallback} />
</Switch>
</MuiThemeProvider>
);
}
else {
return (<h1></h1>)
}
解决方案
如果要进行连续路由,则必须<Switch>
在条件中包含整个。这是一个认证的例子。
import React from "react";
import ReactDOM from "react-dom";
import { createBrowserHistory } from "history";
import { Router, Route, Switch, Redirect } from "react-router-dom";
// core components
import Admin from "layouts/Admin.js";
import SignIn from "layouts/SignIn";
const hist = createBrowserHistory();
const loggedRoutes = () => (
<Switch>
<Route path="/" component={SignIn} />
<Route path="/admin" component={Admin} />
<Redirect from="/admin" to="/admin/aboutUs/whatWeDo" />
</Switch>
);
const routes = () => (
<Switch>
<Route path="/" component={SignIn} />
<Route path="/login" component={Admin} />
<Redirect from="/" to="/login" />
</Switch>
);
ReactDOM.render(
<Router history={hist}>
{checkIfAuth? loggedRoutes():routes()}
</Router>,
document.getElementById("root")
);
推荐阅读
- wordpress - 强制在 SSL / HTTPS 中安装 WordPress
- python - 未使用 sys 模块的 Python 模块导入错误
- python - 在 python 列表中的元素上只保留两个部分
- javascript - Node.js - 等待循环内抛出的所有承诺
- ssl - 如何获取对 Weblogic 域定义的身份和信任存储的引用?
- python - 是否可以将 NumPy 函数映射到 tf.data.dataset?
- javascript - 存在数据时出现错误“无法读取未定义的属性 'url'”
- mysql - 比较同一表中的两个元素并返回差异/缺失数据
- css - 在输入标签内添加按钮
- python - 如何结合日期和时间?