我试图迁移到使用React Router 4并且在理解<Switch>
组件的逻辑时遇到了一些麻烦,因为它在docs中用于处理404(或不匹配的)路线。<Switch>组件在react-router-4中匹配null值
对于我的条目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
组件会检查用户是否有这些权限,如果是这样,它使孩子们直接,如果不是,则返回从render()
null
。
此处的预期行为是,<Route path="/admin" />
在没有足够权限且<Route component={NotFound} />
组件呈现时根本不呈现。
按照docs:
呈现一个相匹配的第一个孩子。 A 没有路径总是匹配。
但是,如果我去任何航线宣告的<Authorize>
组件后,路由器匹配null
。这意味着,根据上面的例子,去/users
返回null。预期行为是否会返回<Switch/>
组件中的第一个匹配项,即使它的值为null
?
我该如何为这种情况提供一个“全部通过”路由(404),而不需要为App.js中的许多经过身份验证的路由创建一个<PrivateRoute>
组件?一个null
值应该真的产生一个匹配?
我有同样的问题。你有没有找到这方面的解决方案? – Salim
我相信这个问题是由于我的组件造成的,但我从未发现这是为什么会出现这种情况。 –
Himmel