diff --git a/package.json b/package.json
index 9a69e8d..983b4a7 100644
--- a/package.json
+++ b/package.json
@@ -52,6 +52,8 @@
"razzle-dev-utils": "3.0.0-alpha.2",
"react-dev-utils": "6.0.4",
"react-error-overlay": "5.0.4",
+ "react-redux": "6.0.1",
+ "redux": "4.0.1",
"resolve-url-loader": "3.0.0",
"sass-loader": "7.1.0",
"source-map-support": "0.5.9",
diff --git a/src/client.js b/src/client.js
index fbbe571..4eaa926 100644
--- a/src/client.js
+++ b/src/client.js
@@ -1,8 +1,24 @@
import React from 'react';
import { hydrate } from 'react-dom';
+import { createStore } from 'redux'
+import { Provider } from 'react-redux'
+
import App from './App';
+import rootReducer from './reducer'
+
+// Grab the state from a global variable injected into the server-generated HTML
+const preloadedState = window.__PRELOADED_STATE__ // eslint-disable-line
+
+// Allow the passed state to be garbage-collected
+delete window.__PRELOADED_STATE__ // eslint-disable-line
+
+const store = createStore(rootReducer, preloadedState)
-hydrate(, document.getElementById('root'));
+hydrate(
+
+
+ ,
+ document.getElementById('root'));
if (module.hot) {
module.hot.accept();
diff --git a/src/reducer.js b/src/reducer.js
new file mode 100644
index 0000000..08858e0
--- /dev/null
+++ b/src/reducer.js
@@ -0,0 +1,20 @@
+const initialState = {
+ counter: 0,
+};
+
+const reducer = (state = initialState, action) => {
+ switch (action.type) {
+ case 'INCREMENT':
+ return {
+ counter: state + 1,
+ };
+ case 'DECREMENT':
+ return {
+ counter: state - 1,
+ };
+ default:
+ return state;
+ }
+};
+
+export default reducer;
diff --git a/src/server.js b/src/server.js
index e5f5248..d0ad60c 100644
--- a/src/server.js
+++ b/src/server.js
@@ -1,25 +1,18 @@
import React from 'react';
import express from 'express';
import { renderToString } from 'react-dom/server';
+import { createStore } from 'redux';
+import { Provider } from 'react-redux';
+
import App from './App';
+import rootReducer from './reducer';
const assets = require(process.env.SHINOBI_ASSETS_MANIFEST);
-const server = express();
-server
- .disable('x-powered-by')
- .use(express.static(process.env.SHINOBI_PUBLIC_DIR))
- .get('/*', (req, res) => {
- const context = {};
- const markup = renderToString();
-
- if (context.url) {
- res.redirect(context.url);
- } else {
- res.status(200).send(
- `
+const renderToHtml = (markup, preloadedState) =>
+ `
-
+
Welcome to Shinobi
@@ -34,12 +27,38 @@ server
? ``
: ``
}
-
-
+
+
+
${markup}
-
-`,
- );
+
+