reactjs - 如何将旧的 react-router HashRouter(带有 #)重定向到 BrowserRouter?

标签 reactjs nginx react-router

我们正在更换 react-router-dom s HashRouterBrowserRouter并希望将旧路由重定向到新路由。
我标记了 nginx因为我不介意在那里进行重定向。 :)

假设我们有一条旧路由 /#/users/#/users:id :它们应该匹配并重定向到 /users/users/:id .

到目前为止,我尝试过( react-router-dom v5.0.1 ):

<Router>
  <Switch>
    <Route path='/users' component={UsersComponent} />
    <Route path='/users/:id' component={UsersDashComponent} />
  </Switch>
  <Redirect from='/#/users' to '/users' />
  <Redirect from='/#/users/:id' to='/users/:id' />
</Router>

第一条路由匹配并重定向正常。第二个(使用 id )有问题。当我导航到 /#/users/123它重定向到 /users/:id .它正在取代实际的 123:id .

这是路线的两个例子。我们还有更多需要重定向的参数。

最佳答案

我认为导航你正在使用这样的东西,

<Link to="/#/users" />
<Link to="/#/users/123" />

根据 docs ,

A <Router> that uses the hash portion of the URL (i.e. window.location.hash) to keep your UI in sync with the URL.



使用时 HashRouter您不需要预先添加 #手动 React 路由器自动添加 #URL
所以你的路线必须是,
import { HashRouter } from 'react-router-dom'


<HashRouter>
  <Switch>
    <Route exact path='/users' component={UsersComponent} />
    <Route exact path='/users/:id' component={UsersDashComponent} />
  </Switch>
</HashRouter>


链接应该是,
<Link to="/users" />
<Link to="/users/123" />

现在来回答你的问题,如何更换HashRouterBrowserRouter ?

要做到这一点,你只需要这样做,
import { BrowserRouter } from 'react-router-dom'


<BrowserRouter>
  <Switch>
    <Redirect from='/#/users' to '/users' />
    <Redirect from='/#users/:id' to='/users/:id' />
    <Route exact path='/users' component={UsersComponent} />
    <Route exact path='/users/:id' component={UsersDashComponent} />
  </Switch>
</BrowserRouter>

你的链接应该是一样的。

注:也看看我加了exactroute ,它将匹配精确的 path .

关于reactjs - 如何将旧的 react-router HashRouter(带有 #)重定向到 BrowserRouter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56981230/

相关文章:

javascript - React-router 如何通过 props 将参数传递给其他组件?

javascript - 如何在 Highcharts 事件监听器中访问 React 钩子(Hook)状态

javascript - 使用 React 重新渲染时 Highcharts Y 轴覆盖

nginx - 以零停机时间更新容器中的 Nginx 配置文件

reactjs - 当使用react-router-dom v6时,我还需要这个@types/react-router-dom包吗?

javascript - Redux 和 react 路由器 : Provider bug

javascript - ESLint 缺少类组件中的 props 验证

apache - Symfony2 : Failed to start the session because headers have already been sent

javascript - 如何在 React Router v4 中进行布局

Docker 和 NGINX - 使用 docker-compose 构建时在上游找不到主机