解决React Router v6中默认子路由对应的NavLink始终激活的问题

200 阅读1分钟

业务

点击“关于”锚点导航到默认子路由“企业历史”

问题复现

注意:本文所用路由版本为6.2.1

...
<BrowserRouter>
  <Routes>
    ...
    <Route path={'about'} element={<About/>}>
      <Route index element={<div>History</div>}/>
      ...
    </Route>
    ...
  </Routes>
</BrowserRouter>
...
function About () {
  return (
    <div>
      <NavLink to={''}>企业历史</NavLink>
      ...

      <Outlet/>
    </div>
  )
}

image.png

image.png

解决方案

利用<Navigate>做重定向

<BrowserRouter>
  <Routes>
    ...
    <Route path={'about'} element={<About/>}>
      <Route index element={<Navigate to={'history'} replace={true}/>}/>
      <Route path={'history'} element={<div>History</div>}/>
      ...
    </Route>
    ...
  </Routes>
</BrowserRouter>
...
function About () {
  return (
    <div>
      <NavLink to={'history'}>企业历史</NavLink>
      ...

      <Outlet/>
    </div>
  )
}

image.png

image.png

新的问题

现在/about路径相当于不复存在了,因为会重定向到/about/history