2016-07-19 103 views
1

使用react 15.1.0react-router 2.5.2,我想重寫以下JSX語法:如何使用反應路由器將重定向重寫爲普通路由?

<Router routes={routes} history={hashHistory}> 
    <Redirect from="/" to="/users" /> 
    <Route path="/" component={Navigation}> 
    <Route path="/users" component={UsersPage}/> 
    <Route path="/endpoints" component={EndpointsPage}/> 
    </Route> 
</Router> 

成普通路線,像這樣:

const routes = { 
    path: '/', 
    component: Navigation, 
    childRoutes: [ 
    {path: '/users', component: UsersPage}, 
    {path: '/endpoints', component: EndpointsPage} 
    ], 
    onEnter: (nextState, replace) => replace('/users') 
}; 

React.render(<Router routes={routes} history={hashHistory}/>, element); 

但是後者的結果總是:

Uncaught RangeError: Maximum call stack size exceeded

onEnter: (nextState, replace) => replace('/users')顯然不足以取代<Redirect from="/" to="/users" />。我怎樣才能成功重寫重定向?有沒有更好的方法使導航到/總是最終在/users

回答

3

有一種叫做IndexRedirect的東西,我沒有意識到。使用索引重定向,在普通路由中執行此操作的正確方法是:

const routes = { 
    path: '/', 
    component: Navigation, 
    indexRoute: {onEnter: (nextState, replace) => replace('/users')}, 
    childRoutes: [ 
    {path: '/users', component: UsersPage}, 
    {path: '/endpoints', component: EndpointsPage} 
    ] 
}; 

React.render(<Router routes={routes} history={hashHistory}/>, element);