React Router + Redux - Dispatch an async action on route change?

前端 未结 3 864
温柔的废话
温柔的废话 2021-01-04 22:46

I have a universal react app that\'s using redux and react-router.

I have several routes as follows:

/2016
/2015
/2014
/2013

etc.

3条回答
  •  攒了一身酷
    2021-01-04 23:20

    The 'lifecycle' hook onEnter and onChange has been removed in React-router 4 which makes most of the other answers to this question out-dated.

    Whilst I recommend you to use your components lifecycle methods to achieve your goal, here is an answer to your question which works on React-router 4.

    What works today is listen to the history change using History library created by the developers of React router themself and dispatch async actions from there.

    // history.js
    import createHistory from "history/createBrowserHistory"
    
    const history = createHistory()
    
    // Get the current location.
    const location = history.location
    
    // Listen for changes to the current location.
    const unlisten = history.listen((location, action) => {
        //Do your logic here and dispatch if needed
    })
    
    export default history
    

    Then import the history in your application

    // App.js
    import { Router, Route } from 'react-router-dom';
    import Home from './components/Home';
    import Login from './components/Login';
    import history from './history';
    
    class App extends Component {
      render() {
        return (
          
            
    ) } }

    Source: History library React router docs

提交回复
热议问题