import React from 'react'; import { hydrate } from 'react-dom'; import { Provider } from 'react-redux'; import { createStore, applyMiddleware, compose } from 'redux'; import { BrowserRouter } from 'react-router-dom'; import Reducer from 'reducers'; import createSagaMiddleware from 'redux-saga'; import rootSaga from 'sagas'; import GAListener from 'components/GAListener'; import App from './app'; // get the state from a global variable injected into the server-generated HTML const preloadedState = window.__PRELOADED_STATE__ || null; // Allow the passed state to be garbage-collected delete window.__PRELOADED_STATE__; // create and apply middleware const sagaMiddleware = createSagaMiddleware(); const middleware = applyMiddleware(sagaMiddleware); const reduxMiddleware = window.__REDUX_DEVTOOLS_EXTENSION__ ? compose(middleware, window.__REDUX_DEVTOOLS_EXTENSION__()) : middleware; // create teh store let store; if (preloadedState) { console.log('initial load: preloaded state found'); store = createStore(Reducer, preloadedState, reduxMiddleware); } else { console.log('initial load: no preloaded state found'); store = createStore(Reducer, reduxMiddleware); } // run the saga middlweare sagaMiddleware.run(rootSaga); // render the app hydrate( , document.getElementById('react-app') );