使用 React-Router-Dom 隐藏 Url 扩展

IT技术 javascript reactjs
2021-05-02 10:54:24

我正在使用react-router-dom在 React 站点中创建客户端页面。这个扩展工作正常,但我想知道是否有办法隐藏 URL 扩展,使其不出现在浏览器导航栏中。

这是我的代码:

class App extends Component {
  render() {
    return (
      <div>
        <ul>
          <li><Link to="/">Home</Link></li>
          <li><Link to="/airports">Airports</Link></li>
          <li><Link to="/cities">Cities</Link></li>
          <li><Link to="/courses">Courses</Link></li>
        </ul>

        <Route path="/" exact component={Home}/>
        {/* You don't always have to render a whole component */}
        <Route path="/airports" render={() => (<div> This is the airport route </div>)}/>
        <Route path="/cities" component={City}/>
        <Route path="/courses" component={Courses}/>
      </div>
    );
  }
}

所以点击Airports会显示www.myurl.com/airports,点击Cities显示www.myurl.com/cities由于这些页面是在客户端而不是服务器端创建的,我真的很想隐藏这些扩展,以便每当我点击这些链接时,它只会显示www.myurl.com.

希望有一种简单的方法来实现这一点。任何帮助是极大的赞赏!

1个回答

有两种方法可以做到这一点:

  1. 使用内存历史

从文档:

内存历史不会从地址栏中操作或读取。这就是我们实现服务器渲染的方式。它对于测试和其他渲染环境(如 React Native)也很有用。

像这样使用一个:

const history = createMemoryHistory(location)
render(
  <Router history={history}>
    <Route path='/' component={App}>
      <IndexRoute component={Home} />
      <Route path='about' component={About} />
      <Route path='features' component={Features} />
    </Route>
  </Router>,
  document.getElementById('app')
)
  1. 使用内存路由器

从文档:

将“URL”历史记录保存在内存中的路由器(不读取或写入地址栏)。在测试和非浏览器环境(如 React Native)中很有用。

import { MemoryRouter } from 'react-router'

<MemoryRouter>
  <App/>
</MemoryRouter>