2017-07-06 64 views
0

在我的反應,和/基於終極版的應用程序,我已經實現了註銷像下面防止反應路由器從檢測位置變化

reducers/index.js在那裏我做combineReducers,我創建了一個叫做appReducer是應用級減速。在那裏我檢查LOGOUT操作,然後返回undefined

這一切工作正常。我想要做的是,對於LOGOUT動作,我也想清除localStorage並重定向到登錄頁面。請注意,我想重定向原生瀏覽器的方式,不使用react-router。如果我做window.location = '/'。首先,它通過react-router檢測到,我看到登錄頁面稍微有一點點,然後刷新它有點奇怪。

有沒有辦法阻止反應路由器通知位置變化!?

回答

1

您無法完全防止它,但您可以通過訪問history.listen函數來控制它。

使用React-Router 4,您可以使用HOC withRouter來包裝頂層組件。

export default withRouter(connect(mapStateToProps, mapDispatchToProps)(App)); 

這允許訪問this.props.history和控制它

class App extends Component { 
    constructor(props) { 
    super(props); 

    this.props.history.listen((location, action) => { 
     //here you can control the location change 
    }); 
    } 

    render() { 
    return (
     </div> 
    ); 
    } 
} 

,你也有歷史的物體上listenBefore事件,你可以用這個事件來控制導航和補充您自己的自定義導航邏輯:

history.listenBefore((location, done) => doSomething(location).then(done))