2017-07-30 89 views
1

我使用的是the next (5.0.0) version react-router-redux,它與react-router 4.x兼容。如何避免重定向兩次(react-router-redux)?

我的應用有兩個頁面/login/home

如果用戶訪問不存在的頁面,我試圖將頁面重定向到/login。這是我的代碼

import { Route, Redirect } from 'react-router-dom'; 
import { ConnectedRouter, routerMiddleware, push } from 'react-router-redux'; 

ReactDOM.render(
    <Provider store={store}> 
    <ConnectedRouter history={history}> 
     <div> 
     <Route path="/login" render={() => (
      isSignedIn ? <Redirect to="/home" /> : <Login /> 
     )}/> 

     <Route path="/home" component={Home} /> 

     <Redirect to="/login" /> 
     </div> 
    </ConnectedRouter> 
    </Provider>, 
    document.getElementById('root') 
); 

如果我刪除<Redirect to="/login" />如果用戶已登錄,他打開/home頁面時,應用程序將訪問主頁直接,這是很好的。

但是,當用戶打開頁面/home時,應用程序將首先重定向到/login,然後返回到/home

我該如何避免這種重定向兩次?由於

+0

爲什麼不配置家庭路由,然後重定向到登錄是用戶沒有從家庭組件登錄 –

+0

您好@ShubhamKhatri,我沒有得到它,你能解釋更多?謝謝 –

+0

看到這個問題檢查登錄在主頁https://stackoverflow.com/questions/44127739/programatically-routing-based-on-a-condition-with-react-router/44128108#44128108和重定向 而我意思是你可以有一個類似於'' –

回答

2

利用Switch,使得第一匹配的路由被渲染,並沒有別的

import {Switch} from 'react-router'; 

ReactDOM.render(
    <Provider store={store}> 
    <ConnectedRouter history={history}> 
     <Switch> 
     <Route path="/login" render={() => (
      isSignedIn ? <Redirect to="/home" /> : <Login /> 
     )}/> 

     <Route path="/home" component={Home} /> 

     <Redirect to="/login" /> 
     </Switch> 
    </ConnectedRouter> 
    </Provider>, 
    document.getElementById('root') 
); 

你的情況會發生什麼事是,即使/home匹配,則也將執行Redirect

+0

感謝您提醒''! –

+0

正如我在我的評論中所說的,您可以保持重定向的邏輯以在Home組件中登錄。請參閱https://stackoverflow.com/questions/44127739/programatically-routing-based-on-a-condition-with-react-router/44128108#44128108 –