我正在尝试迁移以使用 React Router 4,但在理解<Switch>
组件的逻辑时遇到了一些麻烦,因为它在文档中用于处理 404(或不匹配的)路由。
对于我的入口 JavaScript 文件,我设置了以下路由。
索引.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
组件中,我有更多指定的路由,我可以确定只有在用户登录时才能访问这些路由。
应用程序.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 path="/admin" />
当权限不足并且<Route component={NotFound} />
组件呈现时根本不呈现。
根据文档:
A 呈现匹配的第一个孩子。A 没有路径总是匹配。
但是,如果我转到在组件之后声明的任何路由<Authorize>
,路由器将匹配null
. 这意味着,根据上面的示例,将/users
返回 null。react-router 的预期行为是否会返回<Switch/>
组件中的第一个匹配项,即使它是一个null
值?
如何在不<PrivateRoute>
为 App.js 中众多经过身份验证的路由中的每一个创建组件的情况下,为这种情况提供“全能”路由 (404) ?一个null
值真的应该产生匹配吗?