我创建了将用户重定向到登录页面的应用程序,如果他登录,则可以访问在Home组件中定义的站点的其他路径 . 问题是我现在无法添加NotFound路由 . 这是我的代码
<BrowserRouter basename="/">
<main>
<Switch>
<Route exact path="/login"
render={(props) => <Login {...props} setLoggedIn={() => this.setLoggedIn()}/>}/>
<Route path="/" render={(props) => (
this.state.isAdminLogin ? (
<Home {...props} />
) : (
<Redirect to="/login"/>
)
)}/>
<Route component={NotFound} />
</Switch>
</main>
</BrowserRouter>
当我打开不存在的路线时,它仍显示主页...
2 回答
你的情况下的问题是你有一个
Switch
组件,它在NotFound route
之前呈现一个带有path='/'
的Route,它始终匹配,并且Redirect
或渲染Home
组件,因此控件永远不会到达NotFound Route
.您需要重新编写代码以编写PrivateRoute HOC . Refer to this link to implement a PrivateRoute component并将其用于要进行身份验证的所有路由,然后用于不匹配的路由以呈现404路由
您需要一个模式才能匹配路由 .
要使其正常工作,请确保在匹配之前没有任何路由,例如在您的示例中 .