Skip to content
This repository was archived by the owner on Nov 16, 2018. It is now read-only.

Commit 3974c9f

Browse files
authored
add react-router-redux (#28)
1 parent e3735b9 commit 3974c9f

File tree

7 files changed

+148
-108
lines changed

7 files changed

+148
-108
lines changed

package.json

+9-7
Original file line numberDiff line numberDiff line change
@@ -60,28 +60,29 @@
6060
"babel-preset-stage-2": "6.24.1",
6161
"babel-watch": "2.0.7",
6262
"concurrently": "3.5.0",
63-
"copy-webpack-plugin": "4.1.0",
63+
"copy-webpack-plugin": "4.1.1",
6464
"cross-env": "5.0.5",
65-
"css-hot-loader": "1.3.1",
65+
"css-hot-loader": "1.3.2",
6666
"css-loader": "0.28.7",
6767
"eslint": "4.8.0",
68-
"eslint-config-airbnb": "15.1.0",
69-
"eslint-config-airbnb-base": "12.0.1",
68+
"eslint-config-airbnb": "16.0.0",
69+
"eslint-config-airbnb-base": "12.0.2",
7070
"eslint-plugin-filenames": "1.2.0",
7171
"eslint-plugin-import": "2.7.0",
7272
"eslint-plugin-jsx-a11y": "6.0.2",
7373
"eslint-plugin-react": "7.4.0",
74-
"extract-text-webpack-plugin": "3.0.0",
74+
"extract-text-webpack-plugin": "3.0.1",
7575
"html-webpack-harddisk-plugin": "0.1.0",
7676
"html-webpack-plugin": "2.30.1",
77+
"history": "4.7.2",
7778
"nodemon": "1.12.1",
7879
"postcss-apply": "0.8.0",
7980
"postcss-cssnext": "3.0.2",
8081
"postcss-import": "11.0.0",
8182
"postcss-loader": "2.0.6",
8283
"rimraf": "2.6.2",
8384
"robotstxt-webpack-plugin": "2.0.0",
84-
"style-loader": "0.18.2",
85+
"style-loader": "0.19.0",
8586
"webpack-dev-middleware": "1.12.0",
8687
"webpack-hot-middleware": "2.19.1",
8788
"webpack-simple-progress-plugin": "0.0.2"
@@ -103,9 +104,10 @@
103104
"react-redux": "5.0.6",
104105
"react-router": "4.2.0",
105106
"react-router-dom": "4.2.2",
107+
"react-router-redux": "next",
106108
"redux": "3.7.2",
107109
"redux-devtools-extension": "2.13.2",
108-
"redux-form": "7.0.4",
110+
"redux-form": "7.1.0",
109111
"redux-saga": "0.15.6",
110112
"serialize-javascript": "1.4.0",
111113
"webpack": "3.6.0"

src/RouterWrapper.jsx

+7-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import * as React from 'react';
22
import {Provider} from 'react-redux';
3-
import {BrowserRouter, Route, Switch, Redirect} from 'react-router-dom';
3+
import {ConnectedRouter} from 'react-router-redux';
4+
import {createMemoryHistory} from 'history';
45
import {StaticRouter} from 'react-router';
6+
import {Route, Switch, Redirect} from 'react-router-dom';
57
import AboutAsync from './views/about/AboutAsync';
68
import Home from './views/home/Home';
79
import Contact from './views/contact/Contact';
@@ -10,13 +12,16 @@ import Header from './views/landmarks/Header';
1012
import NotFoundAsync from './views/errors/NotFoundAsync';
1113

1214
const RouterWrapper = (props) => {
13-
const Router = props.isServerSide ? StaticRouter : BrowserRouter;
15+
const Router = props.isServerSide ? StaticRouter : ConnectedRouter;
16+
const history = props.isServerSide ? createMemoryHistory() : props.history;
1417

1518
return (
1619
<Provider store={props.store}>
1720
<Router
1821
context={props.context}
1922
location={props.location}
23+
history={history}
24+
2025
>
2126
<div className="container">
2227
<Header />

src/client.jsx

+9-5
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,26 @@ import 'bootstrap/dist/css/bootstrap.css';
22
import './assets/styles/styles.css';
33

44
import 'fetch-everywhere';
5+
import React from 'react';
6+
import ReactDOM from 'react-dom';
7+
import {createBrowserHistory} from 'history';
58
import {AppContainer as ReactHotLoader} from 'react-hot-loader';
69
import {AsyncComponentProvider} from 'react-async-component';
710
import asyncBootstrapper from 'react-async-bootstrapper';
8-
import React from 'react';
9-
import ReactDOM from 'react-dom';
1011
import RouterWrapper from './RouterWrapper';
1112
import ProviderService from './services/ProviderService';
1213

1314
const codeSplittingState = window.__ASYNC_COMPONENTS_STATE__;
15+
const serverState = window.__STATE__;
1416
const initialState = {
15-
...window.__STATE__,
17+
...serverState,
1618
renderReducer: {
19+
...serverState.renderReducer,
1720
isServerSide: false,
1821
},
1922
};
20-
const store = ProviderService.createProviderStore(initialState);
23+
const history: History = createBrowserHistory();
24+
const store = ProviderService.createProviderStore(initialState, history);
2125
const rootEl = document.getElementById('root');
2226

2327
delete window.__STATE__;
@@ -26,7 +30,7 @@ delete window.__ASYNC_COMPONENTS_STATE__;
2630
const composeApp = (Component) => (
2731
<ReactHotLoader key={Math.random()}>
2832
<AsyncComponentProvider rehydrateState={codeSplittingState}>
29-
<Component store={store} />
33+
<Component store={store} history={history} />
3034
</AsyncComponentProvider>
3135
</ReactHotLoader>
3236
);

src/server/controllers/ReactController.jsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ class ReactController {
1818
method: 'GET',
1919
path: '/{route*}',
2020
handler: async (request, reply) => {
21-
const store = ProviderService.createProviderStore({}, true);
21+
const store = ProviderService.createProviderStore({}, null, true);
2222
const asyncContext = createAsyncContext();
2323
const routeContext = {};
2424
const app = (

src/services/ProviderService.js

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,22 @@
11
import {createStore, applyMiddleware} from 'redux';
2+
import {routerMiddleware} from 'react-router-redux';
23
import rootReducer from '../stores/rootReducer';
34
import {composeWithDevTools} from 'redux-devtools-extension/developmentOnly';
45
import createSagaMiddleware, {END} from 'redux-saga';
56
import rootSaga from '../stores/rootSaga';
67

78
class ProviderService {
89

9-
static createProviderStore(initialState = {}, isServerSide = false) {
10+
static createProviderStore(initialState = {}, history = null, isServerSide = false) {
1011
const sagaMiddleware = createSagaMiddleware();
1112

1213
const store = createStore(
1314
rootReducer,
1415
initialState,
15-
composeWithDevTools(applyMiddleware(sagaMiddleware)),
16+
composeWithDevTools(applyMiddleware(
17+
sagaMiddleware,
18+
routerMiddleware(history),
19+
)),
1620
);
1721

1822
if (isServerSide) {

src/stores/rootReducer.js

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
import {combineReducers} from 'redux';
2+
import {routerReducer} from 'react-router-redux';
23
import UserReducer from './user/UserReducer';
34
import LoadingReducer from './loading/LoadingReducer';
45
import MetaReducer from './meta/MetaReducer';
56
import {reducer as formReducer} from 'redux-form';
67
import RenderReducer from './render/RenderReducer';
78

8-
const rootReducer = combineReducers({
9+
const reducers = {
910
form: formReducer,
1011
loadingReducer: LoadingReducer.reduce,
1112
metaReducer: MetaReducer.reduce,
1213
renderReducer: RenderReducer.reduce,
1314
userReducer: UserReducer.reduce,
14-
});
15+
router: routerReducer,
16+
};
1517

16-
export default rootReducer;
18+
export default combineReducers(reducers);

0 commit comments

Comments
 (0)