【发布时间】:2017-09-11 00:05:03
【问题描述】:
我正在尝试迁移以使用 React Router 4,但在理解 <Switch> 组件的逻辑时遇到了一些麻烦,因为它在 docs 中用于处理 404(或不匹配的)路由。
对于我的条目 JavaScript 文件,我设置了以下路由。
index.js
<Switch>
<Route path="/login" component={Login} />
<Route path="/forgot-password" component={ForgotPassword} />
<Route path="/email-verification" component={EmailVerification} />
<Route component={App} />
</Switch>
Login 组件将检查用户是否经过身份验证,如果是,则将用户重定向到 /dashboard 路由(通过 history.replace)。
App 组件仅在用户通过身份验证时才可访问,并且如果用户未通过身份验证,它具有类似的检查以将用户重定向到 /login。
在我的App 组件中,我有更多指定的路由,我可以确定只有在用户登录时才能访问这些路由。
App.js
<Switch>
<Route path="/dashboard" component={Dashboard} />
<Route path="/accounts" component={Account} />
<Authorize permissions={['view-admin']}>
<Route path="/admin" component={Admin} />
</Authorize>
<Route path="/users" component={Users} />
<Route component={NotFound} />
</Switch>
这就是我的问题。 Authorize 组件检查传递的权限以查看用户是否具有这些权限,如果有,则直接呈现子级,如果没有,则返回null来自render()。
这里的预期行为是,当权限不足并且<Route component={NotFound} /> 组件呈现时,<Route path="/admin" /> 根本不呈现。
根据docs:
A 渲染第一个匹配的孩子。一种 没有路径总是匹配的。
但是,如果我转到<Authorize> 组件之后 声明的任何路由,则路由器与null 匹配。这意味着,根据上面的示例,转到 /users 会返回 null。 react-router 的预期行为是否会返回 <Switch/> 组件中的第一个匹配项,即使它是 null 值?
如何在不为 App.js 中许多经过身份验证的路由中的每一个创建 <PrivateRoute> 组件的情况下为这种情况提供“包罗万象”的路由 (404)? null 值真的应该产生匹配吗?
【问题讨论】:
-
我也有同样的问题。你找到解决办法了吗?
-
我认为问题出在我的
组件上,但我从来没有发现为什么会出现这种情况。
标签: javascript reactjs react-router