为什么发这篇文章
因为我发现这个问题在国内开发者社区没有人提出,而且 React 的文档相当难看,极不符合中国人的阅读习惯
这是在我项目中使用最新版本 react-router-dom 出现的问题:
在使用 <NavLink /> 时,我们可以知道某路由是否为 active 状态
如果是,那么就会展示 active 样式,我们可以使用 exact,但是在 v6 版本中
请不要使用 exact!!!
因为你会发现:你与另外一个子路由连接时,你会发现,你的 index 路由,也会处于 active,所以 index 路由如果有 active 样式的话,将会使你非常尴尬
解决方法
请在 <NavLink /> 里加上 end
// App.jsx
<nav>
<NavLink to='/account' end> 账户的 a 页面 </NavLink>
<NavLink to='/account/b'> 账户的 b 页面 </NavLink>
<NavLink to='/account/c'> 账户的 c 页面 </NavLink>
</nav>
<Outlet />
// Router.jsx
<Router>
<Routes>
<Route path='/account' element={<Account />}>
<Route index element={<A />} />
<Route path='b' element={<B />} />
<Route path='c' element={<C />} />
</Route>
</Routes>
</Router>
如果没有 end,账户的 a 页面 将始终处于 active 状态。
这样就可以实现 NavLink 当前路径完全匹配时才会激活,而不是你选了 B,结果 A 还亮着。