A Redux binding for React Router v4


stars 🌟issues ⚠️updated 🛠created 🐣size 🏋️‍♀️
4,513153Jun 10, 2021Dec 12, 2016Minified + gzip package size for @atfarm/connected-react-router in KB


Connected React Router Build Status Open Source Helpers

A Redux binding for React Router v4

Main features

:sparkles: Synchronize router state with redux store with uni-directional flow (history -> store -> router -> components).

:gift: Support React Router v4.

:sunny: Support functional component hot reloading while preserving state (with react-hot-reload v3).

:tada: Dispatching history methods (push, replace, go, goBack, goForward) work for both redux-thunk and redux-saga.

:snowman: Nested children can access routing state such as current location directly with react-redux's connect.

:clock9: Support time traveling in Redux DevTools.

:gem: Support Immutable.js

:muscle: Support TypeScript


Using npm:

$ npm install --save connected-react-router

Or yarn:

$ yarn add connected-react-router


Step 1

  • Create a history object.
  • Wrap the root reducer with connectRouter and supply the history object to get a new root reducer.
  • Use routerMiddleware(history) if you want to dispatch history actions (ex. to change URL with push('/path/to/somewhere')).
import { createBrowserHistory } from 'history'
import { applyMiddleware, compose, createStore } from 'redux'
import { connectRouter, routerMiddleware } from 'connected-react-router'
const history = createBrowserHistory()

const store = createStore(
  connectRouter(history)(rootReducer), // new root reducer with router state
      routerMiddleware(history), // for dispatching history actions
      // ... other middlewares ...

Step 2

  • Wrap your react-router v4 routing with ConnectedRouter and pass history object as a prop.
  • Place ConnectedRouter as children of react-redux's Provider.
import { Provider } from 'react-redux'
import { Route, Switch } from 'react-router' // react-router v4
import { ConnectedRouter } from 'connected-react-router'
  <Provider store={store}>
    <ConnectedRouter history={history}> { /* place ConnectedRouter under Provider */ }
      <div> { /* your usual react-router v4 routing */ }
          <Route exact path="/" render={() => (<div>Match</div>)} />
          <Route render={() => (<div>Miss</div>)} />

Now, it's ready to work!


See examples folder



npm run build

Generated files will be in lib folder.


See Contributors and Acknowledge.


MIT License

If you find any bugs or have a feature request, please open an issue on github!

The npm package download data comes from npm's download counts api and package details come from npms.io.