2017-09-14 91 views
0

如何使用反應路由器4有條件地將路由推送到歷史記錄?我收到錯誤'history.push不是函數'。history.push in react router 4

我不在尋找重定向,而是在瀏覽器中的後退按鈕也起作用。

import React from 'react'; 
import ReactDOM from 'react-dom'; 
import {BrowserRouter, Switch, Route, Redirect} from 'react-router-dom'; 


import Signup from './components/Signup'; 
import Welcome from './components/Welcome'; 


class App extends React.Component { 

    constructor() { 
     super(); 
     this.state = { 
      isLoggedIn: false 
     }; 
    } 

    render() { 
     return (
      <BrowserRouter> 
       <div> 
        <Route exact path="/signup" component={Signup}/> 
        <Route exact path="/welcome" component={Welcome}/> 
        <Route exact path="/" render={() => (
         this.state.isLoggedIn ? 
          history.push('/welcome') : history.push('/signup') 
        )}/> 
        <Redirect to="/"/> 
       </div> 
      </BrowserRouter> 
     ); 

    } 
} 


ReactDOM.render(<App/>, document.getElementById('root')); 
+0

這可能幫助:https://stackoverflow.com/questions/42474176/ using-conditional-component-with-the-same-route-path-in-reactjs – Dev

+0

我已經看到了。它不影響這個歷史,它只是有條件地顯示組件。 –

回答

1

重定向組件上有一個選項可以完成您想要的操作。

<Redirect to="/" push /> 

會做導航,也推到瀏覽器歷史記錄

history.push總覺得我錯了:)

+0

它的工作原理 - 簡單而優雅。謝謝。 –