【发布时间】:2020-09-14 13:11:29
【问题描述】:
我在使用 React Router 时遇到了一个奇怪的问题。我的PrivateRoute 包装器在使用Link 或NavLink 导航时不起作用。
基本上我有这样的东西:
<BrowserRouter>
<Switch>
<Route exact path="/"><Home /></Route>
<PrivateRoute exact path="/private"><Private /></PrivateRoute>
</Switch>
</BrowserRouter>
PrivateRoute 只是 Route 的一个包装器,用于检查身份验证。
现在,如果我在地址栏中输入 /private,PrivateRoute 会完成它的工作(并重定向到 /login,但这不会没关系)。
但是,如果我在具有to="/private" 的Home 组件中使用NavLink,即使用户未经身份验证,React Router 也会路由到私有路由。
有什么方法可以合理解决这个问题吗?为什么 React Router 的行为是这样的,并且每次使用 NavLink 导航时都不会“遍历”BrowserRouter 中的所有路由?
【问题讨论】:
-
您的 PrivateRoute 代码是什么?尝试更改路线顺序,因为 Switch 呈现第一个匹配的路线
-
Here 是确切的 PrivateRoute 代码。路由顺序绝对不是问题,因为正如我所提到的,当我在地址栏中键入 URL 时它可以完美运行。
标签: reactjs react-router react-router-dom