我可以在react-router中设置基本路由

时间:2016-07-05 06:21:15

标签: react-router

假设我应用的基本网址是 example.com/app

是否可以在react-router中设置基本路由,而不是将所有路由都写为

/app/a
/app/b
/app/c

我可以将它们指定为

a
b
c

我尝试了我在docs中找到的以下示例,但它不起作用(页面不会显示任何内容)。也许是因为我使用的是react-router@3.0.0-alpha.1,或者我做错了什么。

import { useRouterHistory } from 'react-router'
import { createHistory } from 'history'

const history = useRouterHistory(createHistory)({
  basename: '/app'
})

const Root = ({store}) => (
    <Provider store={store}>
        <Router history={history}>
            <Route path='/' component={App}>
                ...
            </Route>
        </Router>
    </Provider>
)

2 个答案:

答案 0 :(得分:49)

使用最新的react router (v4),您可以轻松完成此操作

<BrowserRouter basename="/calendar"/>
<Link to="/today"/> // renders <a href="/calendar/today">

答案 1 :(得分:2)

如果您想使用<Router />,则可以访问历史对象,从而可以直接从js通过history.push('/my-path')方法更改页面。您将遇到BrowserRouter没有history属性可用,而Router没有basename属性可用的问题。

解决方案如下:

const App: React.FC = () => {
  // do not put a slash at the end of the basename value.
  const history = createBrowserHistory({ basename: '/your-base-name' });

  return <Router history={history}>
           ...
         </Router>;
}
  

所有位置的基本URL。如果您的应用是通过服务器上的子目录提供的,则需要将其设置为子目录。格式正确的基本名称应以斜杠开头,但不能以斜杠结尾

https://reacttraining.com/react-router/web/api/BrowserRouter/basename-string